Go: 标准库 bufio
基于 io.Writer/io.Reader 的缓存适配器,增加了缓冲区 buffer
Go: 标准库 io包定义了IO操作的读写关闭设置偏移的接口,bufio 是基于 io.Reader/io.Writer 的一层缓冲适配器,主要增加用户态 buffer,从而减少底层 Read/Write 调用次数,并提供一些更方便的读写方法。
Reader
- 从底层 reader 多读一点,比如4kb
- 后续读取从 bufio 内部 buffer 里取
- buffer 用完后,再向底层 reader 批量读取
// go doc bufio.Reader
func NewReader(rd io.Reader) *Reader // 默认大小4kb
func NewReaderSize(rd io.Reader, size int) *Reader更方便的方法
// 查看接下来n的字节,但不推进读位置
func (b *Reader) Peek(n int) ([]byte, error)
// 读取直到分隔符delim
func (b *Reader) ReadString(delim byte) (string, error)Writer
- 先写到内部 buffer
- buffer 满了,或主动 Flush,才一次性写到底层 writer
// go doc bufio.Writer
func NewWriter(w io.Writer) *Writer // 默认大小4kb
func NewWriterSize(w io.Writer, size int) *Writer
// 写入底层 writer
func (b *Writer) Flush() errorReadWriter
把 bufio.Reader 和 bufio.Writer 组合起来 Reader, Writer 有各自的buffer
// go doc bufio.ReadWriter
func NewReadWriter(r *Reader, w *Writer) *ReadWriterScanner
高层、方便的 token 迭代器
// go doc bufio.Scanner
func NewScanner(r io.Reader) *Scanner
// 分割token
func (s *Scanner) Split(split SplitFunc)
// 分割token函数
type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)
// 具体实现
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanRunes(data []byte, atEOF bool) (advance int, token []byte, err error)
func ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error)
// 获取数据
func (s *Scanner) Scan() bool
func (s *Scanner) Text() string
评论