// A Buffer is a variable-sized buffer of bytes with Read and Write methods.
// The zero value for Buffer is an empty buffer ready to use.
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.
}
注意:从 bytes.Buffer 读取数据后,缓冲区的可见数据从偏移 off 开始。
buf.Bytes()方法返回的是buf的引用,而不是原始数据的拷贝,这意味着如果你修改了buf中的数据,那么返回的切片也会受到影响。如果你想要得到原始数据的拷贝,你可以使用copy函数或者bytes包中的Clone函数。
var buf bytes.Buffer
buf.WriteString("hello world")
r := bytes.NewReader(buf.Bytes())
ret, err := io.ReadAll(r)
if err != nil {
panic(err)
}
fmt.Println(string(ret))
fmt.Println(string(buf.Bytes()))
上面这段代码从buf.Bytes()创建一个新的reader,这样从r读取数据后不会改变原来的buf的off
var buf bytes.Buffer
buf.WriteString("hello world")
r := bufio.NewReader(&buf)
ret, err := io.ReadAll(r)
if err != nil {
panic(err)
}
fmt.Println(string(ret))
fmt.Println(string(buf.Bytes()))
上面这段代码从buf新建了一个reader,这样从r读取数据后会改变原来的buf的off