bufio-缓存IO,读取一行的数据
bufio 包实现了缓存IO。它包装了 io.Reader 和 io.Writer 对象,创建了另外的Reader和Writer对象,它们也实现了 io.Reader 和 io.Writer 接口,不过它们是有缓存的。
ReadLine
可以读取单独的行,一般读文件的时候,我就使用它,但由于缓存的问题,造成使用上出了些问题。
bufio默认缓存大小为4096
个字节,但由于我读取的文件某行大于这个数,导致ReadLine
竟没有读完整,这让我感觉很奇怪,后来想到很可能是缓存大小的问题,使用NewReaderSize
函数重设缓存后,程序表现正常。
经了解,ReadLine
尝试返回单独的行,不包括行尾的换行符("\r\n"或者"\n")。
如果一行大于缓存,isPrefix
会被设置为 true
,返回已经读到的数据(缓存填满),剩下的数据等待再次调用函数去读取。下次重复这个操作,直到读完整行数据,isPrefix
将会被设置为 false
。
1 | func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error) |
这样的操作,我感觉不符合我预期想要的结果,我不管你的缓存大小,我只想要一行,一行就是一行而已。所以可以这样做。
这样做,就不会由于缓存大小问题而只返回缓存部分了,而是一行有多长,就给你返回多长数据。
1 | // ReadBytes 读到什么标志为终止 |
本文标题:bufio-缓存IO,读取一行的数据
文章作者:小师
发布时间:2019-12-31
最后更新:2022-05-04
原始链接:chunlife.top/2019/12/31/bufio-缓存IO,读取一行的数据/
版权声明:本站所有文章均采用知识共享署名4.0国际许可协议进行许可