目录

【Golang】buffer包的使用

定义

Buffer是一个可变长的字节缓冲区,具备读写的方法。Buffer的零值是一个空的缓冲区。

1
2
3
4
5
type Buffer struct {
	buf      []byte // contents are the bytes buf[off : len(buf)]
	off      int    // read at &buf[off], write at &buf[len(buf)]
	lastRead readOp // last read operation, so that Unread* can work correctly.
}

声明

有四种声明方法。

  1. 直接定义一个Buffer变量。
1
var b bytes.Buffer
  1. 使用New返回Buffer变量指针。
1
b := new(bytes.Buffer)
  1. 使用[]byte切片初始化。
1
b := bytes.NewBuffer([]byte("hello"))
  1. 使用string初始化。
1
b := bytes.NewBufferString("hello")

写数据

Buffer提供了5种写数据的方法。

  1. []byte切片写入尾部。
1
func (b *Buffer) Write(p []byte) (n int, err error)
  1. string写入尾部。
1
func (b *Buffer) WriteString(s string) (n int, err error)
  1. 将字符写入尾部。
1
func (b *Buffer) WriteByte(c byte) error
  1. rune写入尾部。
1
func (b *Buffer) WriteRune(r rune) (n int, err error)
  1. 将接口对象写入尾部。
1
func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)

读数据

Buffer提供了7种读数据的方法。

  1. 读取n个字符。
1
func (b *Buffer) Next(n int) []byte
  1. 将数据读入[]byte
1
func (b *Buffer) Read(p []byte) (n int, err error)
  1. 读取第一个byte
1
func (b *Buffer) ReadByte() (byte, error)
  1. 读取第一个UTF8编码字符。
1
func (b *Buffer) ReadRune() (r rune, size int, err error)
  1. 读取分隔符前的内容,并且返回切片。
1
func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
  1. 读取分隔符前的内容,并且返回字符串。
1
func (b *Buffer) ReadString(delim byte) (line string, err error)
  1. 将内容输出到接口对象。
1
func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)

其他方法

  1. 返回字节切片。
1
func (b *Buffer) Bytes() []byte
  1. 返回字节切片容量。
1
func (b *Buffer) Cap() int
  1. 为容量增加n个字节。
1
func (b *Buffer) Grow(n int)
  1. 返回缓冲区长度。
1
func (b *Buffer) Len() int
  1. 清空数据。
1
func (b *Buffer) Reset()
  1. 字符串化。
1
func (b *Buffer) String() string
  1. 丢弃前n个未读字节以外的数据。
1
func (b *Buffer) Truncate(n int)
  1. 将最后一次成功读取的字节,设为未读取状态。
1
func (b *Buffer) UnreadByte() error
  1. 将最后一次读取的rune字符,设为未读取状态。
1
func (b *Buffer) UnreadRune() error