Go标准库学习笔记-带缓冲的IO(bufio)

本文介绍了Go标准库bufio,它提供数据缓冲功能,减少大块数据读写的开销。bufio包括Reader、Scanner和Writer三部分,分别详细阐述了它们的功能、常用方法及示例。Reader提供细粒度的读取操作,如Read、Discard等;Scanner更适合数据读取,通过splitFunc拆分输入数据;Writer则简化了数据写入操作。

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

概述

bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销。

实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行。当发起一次读写操作时,会首先尝试从缓冲区获取数据;只有当缓冲区没有数据时,才会从数据源获取数据更新缓冲。

Reader

可以通过NewReader函数创建bufio.Reader对象,函数接收一个io.Reader作为参数;也就是说,bufio.Reader不能直接使用,需要绑定到某个io.Reader上。函数声明如下:

func NewReader(rd io.Reader) *Reader

func NewReaderSize(rd io.Reader, size int) *Reader // 可以配置缓冲区的大小

相较于io.Reader,bufio.Reader提供了很多实用的方法,能够更有效的对数据进行读取。首先是几个基础方法,它们能够对Reader进行细粒度的操作:

  • Read,读取n个byte数据
  • Discard,丢弃接下来n个byte数据
  • Peek,获取当前缓冲区内接下来的n个byte,但是不移动指针
  • Reset,清空整个缓冲区

具体的方法声明如下:

func (b *Reader) Read(p []byte) (n int, err error)

func (b *Reader) Discard(n int) (discarded int, err error)

func (b *Reader) Peek(n int) ([]byte, error)

func (b *Reader<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值