Go的bufio包

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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类型值的初始化字段

  1. buf[]byte类型的字段,即字节切片,代表缓冲区。

    虽然是切片类型,但是其长度却会在初始化的时候指定,并在之后保持不变。

  2. rdio.Reader类型的字段,代表底层读取器。

    缓冲区的数据就是从这里拷贝来的。

  3. r:int类型的字段,代表缓冲区进行下一次读取时的开始索引。也称为已读计数。

  4. w:int类型的字段,代表缓冲区进行下一次写入时的开始索引。也称为已写计数。

  5. err:error类型的字段。它的值表示从底层读取器获得数据时发生的错误。

  6. lastByte:int类型的字段,用于记录缓冲区中最后一次被读取的字节。

    读回退时会用到它的值。

  7. lastRuneSize:int类型的字段。用于记录缓冲区中最后一个被读取的Unicode字符所占用的字节数。

    读回退时会用到它的值。这个字段只会在其所属值的ReadRune方法中才会被赋予有意义的值。在其它的情况下,它都会被置为-1。

2.3 两个用于初始化bufio.Reader类型值的函数

bufio包提供了两个用于初始化bufio.Reader值的函数:

  • NewReader

    NewReader函数初始化bufio.Reader类型的值会拥有一个默认尺寸的缓冲区。这个默认尺寸是4096个字节,即4KB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值