Go的bufio包
一、bufio包
bufio是buffered I/O的缩写,这个代码包的程序实体实现的I/O操作都内置了缓冲区。
bufio包中的数据类型主要有:
- Reader
- Scanner
- Writer和ReadWriter
这些数据类型在初始化的时候需要包装一个或多个简单I/O接口类型的值。
二、bufio.Reader
2.1 bufio.Reader中缓冲区的作用
bufio.Reader中的缓冲区,其实就是一个数据存储中介,它介于底层读取器与读取方法及调用方之间。
所谓的底层读取器,就是在初始化此类值的时候传入的io.Reader类型的参数值。
bufio.Reader类型值的读取方法一般都会先从其所属值的缓冲区读取数据。同时,在必要的时候,它们还会预先从底层读取器里读出一部分数据,并暂存于缓冲区中以备后用。
这样的一个缓冲区的好处是:可以在大多数的时候降低读取方法的执行时间。
虽然读取方法有时还要负责填充缓冲区,但从总体来看,读取方法的平均执行时间一般都会因此有大幅度的缩短。
2.2 bufio.Reader类型值的初始化字段
-
buf:[]byte类型的字段,即字节切片,代表缓冲区。虽然是切片类型,但是其长度却会在初始化的时候指定,并在之后保持不变。
-
rd:io.Reader类型的字段,代表底层读取器。缓冲区的数据就是从这里拷贝来的。
-
r:int类型的字段,代表缓冲区进行下一次读取时的开始索引。也称为已读计数。 -
w:int类型的字段,代表缓冲区进行下一次写入时的开始索引。也称为已写计数。 -
err:error类型的字段。它的值表示从底层读取器获得数据时发生的错误。 -
lastByte:int类型的字段,用于记录缓冲区中最后一次被读取的字节。读回退时会用到它的值。
-
lastRuneSize:int类型的字段。用于记录缓冲区中最后一个被读取的Unicode字符所占用的字节数。读回退时会用到它的值。这个字段只会在其所属值的ReadRune方法中才会被赋予有意义的值。在其它的情况下,它都会被置为-1。
2.3 两个用于初始化bufio.Reader类型值的函数
bufio包提供了两个用于初始化bufio.Reader值的函数:
-
NewReaderNewReader函数初始化bufio.Reader类型的值会拥有一个默认尺寸的缓冲区。这个默认尺寸是4096个字节,即4KB。 <

Go的bufio包提供缓冲I/O操作,包括Reader、Scanner、Writer和ReadWriter等类型。缓冲区作为数据中介,减少读取方法的执行时间。类型中有缓冲区、底层读取器、错误处理等字段,初始化时需要指定I/O接口。缓冲区的填充和压缩有特定机制,读取方法如Peek、Read、ReadSlice和ReadBytes各有用途。类型值的安全性问题需要注意,防止内存泄露。Flush方法确保缓冲数据写入底层写入器。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



