Bufio包
简介
- 与I/O操作强相关的代码包,bufio是“buffered I/O”的缩写
- bufio包中的数据类型主要有: Reader、Scanner、Writer和ReadWriter
- bufio包中用于初始化Reader值的函数
- NewReader 返回 *bufio.Reader类型的值 (默认尺寸是4096个字节)
- NewReaderSize 返回 *bufio.Reader类型的值(默认尺寸是4096个字节)
包级私有fill方法
- fill方法会先检查其所属值的已读计数,若这个计数不大于0
- 缓冲区中字节是全新的
- 缓冲区刚被压缩过
缓冲区的压缩过程:(**fill方法**只要在开始时发现其所属值的已读计数大于0,就会对缓冲区进行一次压缩)
- 把缓冲区中在[已读计数, 已写计数)范围内的所有元素值(或者字节)都依次拷贝到缓冲区的头部
- fill方法把已读计数设置为0,已读计数设置为 原已写计数 - 原已写计数
bufio.Writer类型值
bufio.Writer类型有哪些字段
- err:error 类型的字段
- buf: []byte 类型的字段,代表缓冲区
- n: int 类型的字段,代表对缓冲区进行下一次写入时的开始索引
- wr: io.Writer类型的字段,代表底层写入器
Flush 方法
- bufio.Writer类型有一个名为Flush方法,它的主要功能是把相应缓冲区中暂存的数据写入底层写入器中
- 通常情况下,只要缓冲区中的可写空间无法容纳需要写入的新数据,Flush方法就一定会被调用
- 强烈建议在所有数据写入Writer值后,在调用一次Flush方法
bufio.Reader类型值
Reader值拥有的读方法
- Peek方法: 读取缓冲区中的数据但是不改变已读计数的值
- ReadSlice方法: 在缓冲区的未读部分中寻找给定的分隔符,并在必要时对缓冲区进行填充,如果填充后仍然没有找到分隔符,那么该方法就会把整个缓冲区作为第一结果值返回
- ReadSlice方法会现在缓冲区的未读部分中寻找分割符
- 若未找到,并且缓冲区未满,该方法会先调用fill方法对缓冲区进行填充,然后再次寻找
- 如果缓冲区已被填满,但仍未找到分隔符,该方法会将整个缓冲区中的数据作为第一结果值返回
- ReadBytes方法:对ReadSlice的二层封装,一次次的通过ReadSlice填充缓冲区直至寻找到分割符否则将一直进行下去