当前位置:首页 >探索 >Golang 中的 IO 包详解:单字节操作接口 定义了一个基本方法 ReadRune

Golang 中的 IO 包详解:单字节操作接口 定义了一个基本方法 ReadRune

2024-06-30 20:28:30 [百科] 来源:避面尹邢网

Golang 中的中的字节 IO 包详解:单字节操作接口

作者:路多辛 开发 后端 用于从字符流中读取 Unicode 码点(Rune),定义了一个基本方法 ReadRune,包详接受一个参数类型为 rune 的解单接口指针,并返回读取的操作 Rune 以及错误类型。

io.ByteReader

type ByteReader interface { 	ReadByte() (byte,中的字节 error)}

定义了一个基本方法 ReadByte,用于读取数据源中的包详单个字节,如果没有字节可读,解单接口返回非 nil 的操作错误。

Golang 中的 IO 包详解:单字节操作接口 定义了一个基本方法 ReadRune

标准库中的中的字节 bufio.Reader 实现了该接口,从一个 io.Reader 中读取并提供带缓存的包详读取方法,简单示例如下:

Golang 中的 IO 包详解:单字节操作接口 定义了一个基本方法 ReadRune

package mainimport (	"bufio"	"fmt"	"strings")func main() { 	data := "abc123"	reader := bufio.NewReader(strings.NewReader(data))	for { 		c,解单接口 err := reader.ReadByte()		if err != nil { 			break		}		fmt.Print(string(c))	}}

io.ByteScanner

type ByteScanner interface { 	ByteReader	UnreadByte() error}

是 io.ByteReader 接口的扩展,提供了一个额外的操作方法:UnreadByte,UnreadByte方法让下一次调用 ReadByte 时返回之前调用 ReadByte 时返回的中的字节同一个字节。

Golang 中的 IO 包详解:单字节操作接口 定义了一个基本方法 ReadRune

io.ByteWriter

// ByteWriter is 包详the interface that wraps the WriteByte method.type ByteWriter interface { 	WriteByte(c byte) error}

定义了一个基本方法 ReadByte,用于向数据源中写入单个字节的解单接口能力,

标准库中的 bufio.Writer 实现了该接口,从字节序列中构造并提供缓冲输出,简单示例如下:

package mainimport (	"bufio"	"bytes"	"fmt")func main() { 	buf := new(bytes.Buffer)	writer := bufio.NewWriter(buf)	for _, c := range "abc123" { 		err := writer.WriteByte(byte(c))		if err != nil { 			panic(err)		}	}	writer.Flush()	fmt.Println(buf.String())}

io.RuneReader

type RuneReader interface { 	ReadRune() (r rune, size int, err error)}

用于从字符流中读取 Unicode 码点(Rune),定义了一个基本方法 ReadRune,接受一个参数类型为 rune 的指针,并返回读取的 Rune 以及错误类型。

io.RuneReader 通常与 bufio.Reader 一起使用,用于构建高效的文本读取器。例如如下示例,使用 bufio.Reader 读取一个文件并逐行解析其中的 Unicode 码点:

package mainimport (	"bufio"	"fmt"	"io"	"log"	"os")func main() { 	file, _ := os.Open("file.txt")	defer file.Close()	reader := bufio.NewReader(file)	for { 		r, _, err := reader.ReadRune()		if err != nil { 			if err == io.EOF { 				break			}			log.Fatal(err)		}		if r == '\n' { 			fmt.Println()		} else { 			fmt.Print(r)		}	}}

io.RuneScanner

type RuneScanner interface { 	RuneReader	UnreadRune() error}

扩展了 io.RuneReader 接口,添加了一个名为 UnreadRune 的方法,用于撤消最近读取的 Rune,并使下一次读取的时候再次返回该 Rune。简单示例如下:

package mainimport (	"bufio"	"fmt"	"io"	"log"	"os"	"strings")func main() { 	scanner := bufio.NewScanner(os.Stdin)	for { 		if ok := scanner.Scan(); !ok { 			break		}		str := scanner.Text()		reader := strings.NewReader(str)		for { 			runeScanner := bufio.NewReader(reader)			r, _, err := runeScanner.ReadRune()			if err != nil { 				if err == io.EOF { 					break				}				log.Fatal(err)			}			fmt.Printf("%#U\n", r)		}	}}

使用 bufio.Scanner 从控制台读取每一行输入,然后将每一行转换为一个 strings.Reader,并将其传递给 bufio.NewReader 来扫描 Rune。

io.StringWriter

// StringWriter is the interface that wraps the WriteString method.type StringWriter interface { 	WriteString(s string) (n int, err error)}

定义了一个基本方法 WriteString,用来将数据写入一个字符串。简单示例如下:

package mainimport (	"fmt"	"io"	"strings")func main() { 	var builder strings.Builder	writer := io.StringWriter(&builder)	writer.WriteString("Hello, ")	writer.WriteString("World!")	result := builder.String()	fmt.Println(result) // 输出:Hello, World!}

首先创建了一个 strings.Builder,然后使用 io.StringWriter 将 builder 转换为一个 io.Writer,最后使用 builder.String 将最终结果转换为一个 string。

责任编辑:姜华 来源: 今日头条 Golangio 包

(责任编辑:休闲)

    推荐文章
    热点阅读