Go-bytes-库

Godoc bytes 文档

type Buffer

一个标记类型的结构体:

1
2
3
type Buffer struct {
// contains filtered or unexported fields
}

NewBuffer 创建并用 []byte 初始化一个 buffer

1
func NewBuffer(buf []byte) *Buffer

buf 为提供的初始值. 之后应不再调用 buf 这个变量.

一般也常直接类型声明来创建:

1
var b bytes.Buffer

NewBufferString 创建并用 string 初始化一个 buffer

1
func NewBufferString(s string) *Buffer

Available 返回 buffer 中未被使用的 bytes 数

1
func (b *Buffer) Available() int

Cap 返回分配给 buffer 的总大小

1
func (b *Buffer) Cap() int

Grow 增大 buffer 的 Cap

1
func (b *Buffer) Grow(n int)

增大 n bytes.

Len 返回 buffer 中可读部分的长度

1
func (b *Buffer) Len() int

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import (
"bytes"
"fmt"
)

func main() {
var b bytes.Buffer
b.Grow(64)
b.Write([]byte("abcde"))
fmt.Printf("%d", b.Len())
}

结果为 5.

Next 返回可读的 n bytes, 指针会向前移动

返回的 slice 尽在下一次调用为 readwrite 时有效:

1
func (b *Buffer) Next(n int) []byte

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
"bytes"
"fmt"
)

func main() {
var b bytes.Buffer
b.Grow(64)
b.Write([]byte("abcde"))
fmt.Printf("%s\n", b.Next(2))
fmt.Printf("%s\n", b.Next(2))
fmt.Printf("%s", b.Next(2))
}

输出为:

1
2
3
ab
cd
e

Read 从 buffer 中读取内容到变量中

1
func (b *Buffer) Read(p []byte) (n int, err error)

同时被读出的内容从 buffer 中移除.

ReadByte 读出的内容以 []byte 形式返回

1
func (b *Buffer) ReadByte() (byte, error)

ReadFrom 读取内容附加到 buffer 后

1
func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)

ReadRune 读出一个 UTF-8 字符

1
func (b *Buffer) ReadRune() (r rune, size int, err error)

ReadString 读取直到分隔符的字符串

返回的字符串包含分隔符:

1
func (b *Buffer) ReadString(delim byte) (line string, err error)

Reset 清空 buffer

1
func (b *Buffer) Reset()

但会保留 storage.

String 将剩下的未被读取的部分以字符串形式返回

1
func (b *Buffer) String() string

Truncate 去除前 n 个 bytes 以外的内容

会保留原来的 storage:

1
func (b *Buffer) Truncate(n int)

UnreadByte 恢复上一个读取的 byte, 即指针回退

1
func (b *Buffer) UnreadByte() error

UnreadRune 恢复上一个读取的 Rune, 指针回退

1
func (b *Buffer) UnreadRune() error

Write 向 buffer 写入内容

1
func (b *Buffer) Write(p []byte) (n int, err error)


Go-bytes-库
http://example.com/2024/02/25/Go-bytes-库/
作者
Jie
发布于
2024年2月25日
许可协议