Skip to main content

Buffer

Buffer

在 Go 语言中,Buffer 属于 bytes 包,可以使用这些包来操作字符串的字节。例如,假设有一个字符串,可以使用 len 函数读取字符串的长度,它将返回数字长度,但如果字符串太大呢?如果想以数据块的形式进行计算,在这种情况下,可以使用 BufferBuffer 允许处理任何大小的动态长度,使其灵活。

Buffer 允许提供缓冲存储,用于存储数据,并在需要时访问这些数据。如果字符串的大小较大,或者需要存储大量字符串到一个变量中,那么可以创建一个缓冲区变量,并将数据存储到该变量中。

追加数据

可通过 WriteString 方法进行字符串数据的追加,该方法返回要追加的字符串的长度及 nil,如果字符串太长,则会抛出 ErrTooLarge 错误。

package main

import (
"bytes"
"fmt"
)

func main() {
var strBuffer bytes.Buffer

n, err := strBuffer.WriteString("Hello")
fmt.Println(n, err) // 5 nil

n, err = strBuffer.WriteString(" World")
fmt.Println(n, err) // 6 nil

fmt.Println(strBuffer.String()) // Hello World
}

写入数据

可通过 io.Writer 接口向缓存内存中写入数据,其也是追加操作:

package main

import (
"bytes"
"fmt"
)

func main() {
var strBuffer bytes.Buffer

fmt.Fprintf(&strBuffer, "It is number: %d, This is a string: %v ", 10, "Bridge")

strBuffer.WriteString("[DONE]")

fmt.Println("The string buffer output is", strBuffer.String())
}

字节写入

可通过字节切片向缓存区写入内容:

package main

import (
"bytes"
"fmt"
)

func main() {
var byteString bytes.Buffer

byteString.Write([]byte("Hello"))

// byteString.WriteString(" World")
fmt.Fprintf(&byteString, " World")

fmt.Println(byteString.String())
}

获取长度

可通过 Len 方法获取缓冲区字符串的长度:

package main

import (
"bytes"
"fmt"
)

func main() {
var strByyte bytes.Buffer
strByyte.Write([]byte("kumar"))
fmt.Println(strByyte.Len()) // 5
}

读取数据

可通过 Read 等方法进行数据的读取:

package main

import (
"bytes"
"fmt"
)

func main() {
var strByte bytes.Buffer

strByte.Write([]byte("Hello World"))

content := make([]byte, 5)
readed, _ := strByte.Read(content)
fmt.Println(readed) // 5
}

更多方法

更多方法和示例可参考官方文档