1.简介

bytes.buffer为go语言内置提供的一个 字节缓存区。
源码在 src/bytes/buffer.go

// A Buffer 提供了可见的 读,写办法// 零值是一个空字节slice.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

var b bytes.Buffer                         //申明一个Buffer变量b := new(bytes.Buffer)                   //应用New申明Buffer变量b := bytes.NewBuffer(s []byte)           //从一个[]byte切片,结构一个Bufferb := bytes.NewBufferString(s string)    //从一个string变量,结构一个Buffer

能够通过 b.Grow来初始化一个 容量大小为n的buffer

// Grow 减少一个n长度的 buffer, 当应用Grow(n)后,至多能够有b个本人,能够写入到buffer外面,如果n是一个正数,Grow会panic,如果buffer不能Grow,会导致panic而后报错 ErrTooLargeb.Grow(n int)

应用案例:

func TestNew(t *testing.T) {    b := bytes.Buffer{}    b.Grow(100)    t.Log(b) //空字符    b1 := bytes.NewBufferString("hello")    t.Log(b1) //hello    b2 := bytes.NewBuffer([]byte{'h', 'e', 'l', 'l', 'o'})    t.Log(b2) //hello}

2、写入一个buffer

b.Write(d []byte) (n int, err error)               //将切片d写入Buffer尾部b.WriteString(s string) (n int, err error)         //将字符串s写入Buffer尾部b.WriteByte(c byte) error                          //将字符c写入Buffer尾部b.WriteRune(r rune) (n int, err error)            //将一个rune写入Buffer尾部

应用案例:

func TestWrite(t *testing.T) {    var b bytes.Buffer    for i := 0; i < 10; i++ {        b.WriteString("hello")    }    t.Log(b.String())}

3、读取一个buffer

//从off偏移量开始读取len(p)长度的字节到p中b.Read(p []byte) (n int, err error)//读取下一个byte并返回,如果没有字节了,而后谬误io.EOFb.ReadByte() (byte, error)//读取下一个 UTF8 编码的字符b.ReadRune() (r rune, size int, err error)//读取缓冲区第一个分隔符delim内容,并且返回从off到分隔符delim的内容b.ReadBytes(delim byte) (line []byte, err error)//读取缓冲区第一个分隔符delim内容,并且返回从off到分隔符delim的内容b.ReadString(delim byte) (line string, err error)

应用案例:

func TestRead(t *testing.T) {    var b bytes.Buffer    for i := 0; i < 10; i++ {        b.WriteString("hello")    }    //读取到第一个'o'之间的字符    s, err := b.ReadString('o')    t.Log(s, err) //hello <nil>}

4、读入到缓存区/从缓存区写入

//从实现了io.Reader接口的可读取对象写入Buffer尾部b.ReadFrom(r io.Reader) (n int64, err error)    //将 Buffer 中的内容输入到实现了 io.Writer 接口的可写入对象中,胜利返回写入的字节数,失败返回谬误b.WriteTo(w io.Writer) (n int64, err error)