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

 未完待续

posted @ 2019-02-28 23:21  慢行厚积  阅读(1210)  评论(0编辑  收藏  举报