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
值的函数:
-
NewReader
NewReader
函数初始化bufio.Reader
类型的值会拥有一个默认尺寸的缓冲区。这个默认尺寸是4096个字节,即4KB。