当前位置: 首页 > 工具软件 > Go Buffer > 使用案例 >

GO语言之bytes.buffer

云啸
2023-12-01

bytes.Buffer

bytes.Buffer是一个缓冲byte类型的缓冲器存放着都是byte。

Buffer 是 bytes 包中的一个type Buffer struct{…}

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.

Buffer是一个变长的缓冲器,具有 Read 和Write方法。Buffer的零值是一个空的 buffer,但是可以使用)

四种方式创建Buffer缓冲器

四种创建方式:

var b bytes.Buffer  //直接定义一个 Buffer 变量,而不用初始化
b1 := new(bytes.Buffer)   //直接使用 new 初始化,可以直接使用
// 其它两种定义方式
func NewBuffer(buf []byte) *Buffer
func NewBufferString(s string) *Buffer

代码实现:

package main

import (
    "bytes"
    "fmt"
)

func main() {
    //第一种定义方式
    var b bytes.Buffer  //直接定义一个 Buffer 变量,而不用初始化
    b.Write([]byte("Hello ")) // 可以直接使用
    fmt.Println(b.String())
    //第二种定义方式
    c := new(bytes.Buffer)
    c.WriteString("World")
    fmt.Println(c)
    //第三种定义方式
    d := bytes.NewBuffer(nil)
    d.WriteString("这是第三种定义方式")
    fmt.Println(d.String())
    //第四张定义方式
    f := bytes.NewBufferString("这是第四种定义方式")
    fmt.Println(f.String())
}

输出:
Hello 
World
这是第三种定义方式
这是第四种定义方式

向Buffer中写入数据

1.Write,把字节切片p写入到buffer中去。

func main() {
    newBytes := []byte(" go")
    //创建一个内容Learning的缓冲器
    buf := bytes.NewBuffer([]byte("Learning"))
    //将newBytes这个slice写到buf的尾部
    buf.Write(newBytes)
    fmt.Println(buf.String())
}

2.WriteString,使用WriteString方法,将一个字符串放到缓冲器的尾部。

func main() {
    newString := " go"
    //创建一个string内容Learning的缓冲器
    buf := bytes.NewBufferString("Learning")
    //将newString这个string写到buf的尾部
    buf.WriteString(newString)
    fmt.Println(buf.String())
}

从Buffer中读取数据

1.Read,给Read方法一个容器p,读完后,p就满了,缓冲器相应的减少了,返回的n为成功读的数量。

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

func main() {
    bufs := bytes.NewBufferString("Learning swift.")
    fmt.Println("缓冲器:"+bufs.String())
    l := make([]byte, 5)
    //把bufs的内容读入到l内,因为l容量为5,所以只读了5个过来
    bufs.Read(l)
    fmt.Println("读取到的内容:"+string(l))
    fmt.Println("缓冲器:"+bufs.String())
}

输出:
缓冲器:Learning swift.
读取到的内容:Learn
缓冲器:ing swift.

2.ReadFrom,从一个实现io.Reader接口的r,把r里的内容读到缓冲器里,n返回读的数量。

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

func main() {
    file, _ := os.Open("d:/a.txt")
    buf := bytes.NewBufferString("Learning swift.")
    buf.ReadFrom(file)              //将text.txt内容追加到缓冲器的尾部
    fmt.Println(buf.String())
}

输出:
Learning swift.this is text

3.Reset,将数据清空,没有数据可读

func main() {
    bufs := bytes.NewBufferString("现在开始 Learning go.")
    bufs.Reset()
    fmt.Println(bufs.String())
}

声明:Nansheng.Su 发表于 2019-04-28 11:03:00 ,共计399字。

转载请署名:GO语言之bytes.buffer | www.sunansheng.com

 类似资料: