ByteReader

NewByteReader 构造函数

  1. func NewByteReader(buf []byte) (reader *ByteReader)

参数是用于读取的字节切片。

Init 方法

  1. func (r *ByteReader) Init(buf []byte)

在使用 ByteReader 对象时,我们可以通过 NewByteReader(nil) 来创建一个空的 ByteReader 对象,后面再通过 Init 方法来初始化这个对象。也可以在通过 Init 方法来重新初始化读取的数据,以便复用 ByteReader 对象。

Next 方法

  1. func (r *ByteReader) Next(n int) (data []byte)

返回接下来的 n 个字节的字节切片,该切片跟 ByteReader 包含的字节切片所包含的数据是共享的,所以,如果当你读取的数据用于只读目的时,使用该方法会非常高效。

Read 方法

  1. func (r *ByteReader) Read(b []byte) (n int, err error)

该方法是 golang 标准库中 io.Reader 接口的实现。

ReadByte 方法

  1. func (r *ByteReader) ReadByte() (byte, error)

该方法是 golang 标准库中 io.ByteReader 接口的实现。

Unread 方法

  1. func (r *ByteReader) Unread(n int)

将读取指针向前移动 n 个字节,进行该操作之后,你可以重新读取之前读过的数据。该方法可以被安全的连续或非连续的多次调用。如果移动的字节数多于已经读取的字节数,则读取指针将移动到开始位置,而不会出错。

UnreadByte 方法

  1. func (r *ByteReader) UnreadByte() error

该方法将读取指针向前移动 1 个字节。该方法签名中包含 error 返回值,仅仅是为了兼容 bytes.Buffer, bytes.Reader, strings.Readerbufio.Reader 这几个结构体上的 UnreadByte 方法的签名,但是该方法的返回值永远为 nil。所以该方法可以被安全的连续或非连续的多次调用。如果读取指针已经移动到了开始位置,调用该方法将什么都不做,而不会出错。