Skip to content

bytes

buffer

参考

在计算机科学中,缓冲区(Buffer)是一种数据结构,它用于临时存储数据,以便稍后进行处理。在 Go 语言中,bytes.Buffer 是一个预定义的类型,用于存储和操作字节序列。

创建缓冲区

// with initialization.
func NewBuffer(buf []byte) *Buffer
func NewBufferString(s string) *Buffer

// without initialization.
var b bytes.Buffer 

写入缓冲区

func (b *Buffer) Write(p []byte) (n int, err error)
func (b *Buffer) WriteByte(c byte) error // 单个字节
func (b *Buffer) WriteRune(r rune) (n int, err error) // 单个 Unicode 字符
func (b *Buffer) WriteString(s string) (n int, err error) // 字符串
func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error) // io.Reader

从缓冲区读取

func (b *Buffer) Read(p []byte) (n int, err error)
func (b *Buffer) ReadByte() (byte, error)
func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
func (b *Buffer) ReadRune() (r rune, size int, err error)
func (b *Buffer) ReadString(delim byte) (line string, err error)
func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)

其他

// 截取缓冲区
func (b *Buffer) Truncate(n int) 
// 扩容缓冲区
func (b *Buffer) Grow(n int) 
// 重置缓冲区
func (b *Buffer) Reset() 

序列化和反序列化

以json为例:

type Person struct {
    Name string
    Age  int
}
​
// 将结构体编码为 JSON
p := Person{"Alice", 25}
enc := json.NewEncoder(&buf)
enc.Encode(p)
fmt.Println(buf.String()) // 输出:{"Name":"Alice","Age":25}
​
// 从 JSON 解码为结构体
var p2 Person
dec := json.NewDecoder(&buf)
dec.Decode(&p2)
fmt.Printf("Name: %s, Age: %d\n", p2.Name, p2.Age) // 输出:Name: Alice, Age: 25

应用场景

  • 网络通信
  • 文件操作
  • 二进制数据处理
  • 字符串拼接
  • 格式化输出
  • 图像处理