go中io处理相关的包
io包
1 | go doc -u io.Reader |
之前介绍的os.File结构体实现了Read和Write函数,可以作为Reader和Writer使用
1 | type multiReader struct { |
multiReader与multiWriter就是一个Reader和Writer的切片,定义了自己的Read和Write方法(对切片中的每个元素分别进行Read与Write)
LimitReader可以限定只读取n个字节
TeeReader会从r中读取数据后再写入w
1 | type Seeker interface { |
Reader,Writer,Seeker,Closer四个接口可以交互组合,例如:
1 | type ReadWriteSeeker interface { |
Copy从src复制到dst,直到遇到EOF或者error
1 | func Copy(dst Writer, src Reader) (written int64, err error) |
bufio包
1 | type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error) |
ScanBytes逐字节读取
ScanLines根据”\r\n”或者”\n”依次取出每行,数据来源为data,advance为下个索引位置
ScanRunes逐rune读取
ScanWords按空格分隔读取
1 | type Scanner struct { |
Scanner的Split可以设置SplitFunc,不设置时默认为ScanLines.Scan方法会按SplitFunc读取数据并放置到Scanner的token字段中.Text方法将token字段中数据转为string并返回,Bytes方法返回字节序列.