go标准库的学习-bufio
参考https://studygolang.com/pkgdoc
导入方式:
import "bufio"
bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。
bufio包的读写模块提供了针对字节或字符串类型的缓冲机制,因此很适合用于读写UTF-8编码的文本文件
1. type Reader
type Reader struct { buf []byte rd io.Reader // reader provided by the client r, w int // buf read and write positions err error lastByte int // last byte read for UnreadByte; -1 means invalid lastRuneSize int // size of last rune read for UnreadRune; -1 means invalid }
1)func NewReader
func NewReader(s string) *Reader
NewReader创建一个从s读取数据的Reader。本函数类似bytes.NewBufferString,但是更有效率,且为只读的。
其他函数和strings标准库中的Reader的函数使用方法相同,可见https://www.cnblogs.com/user-garcia/p/10316221.html
2)func (*Reader) ReadString
func (b *Reader) ReadString(delim byte) (line string, err error)
ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。如果ReadString方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadString方法返回的切片不以delim结尾时,会返回一个非nil的错误。
举例:
package main import( "fmt" "bufio" "strings" "io" "log" ) func main() { reader := bufio.NewReader(strings.NewReader("test bufio's function —— ReadString,\n let's go\n")) for{ line, err := reader.ReadString('\n') if err != nil { if err == io.EOF{ break } log.Fatal(err) } fmt.Print(line) } }
返回:
userdeMBP:src user$ go run test.go test bufio's function —— ReadString, let's go
2.type Writer
type Writer struct { err error buf []byte n int wr io.Writer }
1)func NewWriter
func NewWriter(w io.Writer) *Writer
NewWriter创建一个具有默认大小缓冲、写入w的*Writer。
2)func (*Writer) Flush
func (b *Writer) Flush() error
Flush方法将缓冲中的数据写入下层的io.Writer接口。
举例:
package main import( "fmt" "bufio" "os" ) func main() { writer := bufio.NewWriter(os.Stdout) fmt.Fprintf(writer, "test ")//等价于Printf() fmt.Fprintf(writer, "bufio\n") writer.Flush() }
返回:
userdeMBP:src user$ go run test.go
test bufio
未完待续