专业编程基础技术教程

网站首页 > 基础教程 正文

go|bytes.buffer

ccvgpt 2024-11-26 00:57:24 基础教程 1 ℃

bytes.buffer是一个byte类型的缓冲器,这个缓冲器里存放着都是byte

Index

type Buffer
    func NewBuffer(buf []byte) *Buffer
    func NewBufferString(s string) *Buffer
    func (b *Buffer) Bytes() []byte
    func (b *Buffer) Cap() int
    func (b *Buffer) Grow(n int)
    func (b *Buffer) Len() int
    func (b *Buffer) Next(n int) []byte
    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) ReadFrom(r io.Reader) (n int64, 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) Reset()
    func (b *Buffer) String() string
    func (b *Buffer) Truncate(n int)
    func (b *Buffer) UnreadByte() error
    func (b *Buffer) UnreadRune() error
    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)
    func (b *Buffer) WriteString(s string) (n int, err error)
    func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)

声明一个Buffer的四种方法:

var b bytes.Buffer       //直接定义一个Buffer变量,不用初始化,可以直接使用

b := new(bytes.Buffer)   //使用New返回Buffer变量

b := bytes.NewBuffer(s []byte)   //从一个[]byte切片,构造一个Buffer

b := bytes.NewBufferString(s string)   //从一个string变量,构造一个Buffer

往Buffer中写入数据(缓冲器变大)

go|bytes.buffer

b.Write(d []byte) (n int, err error)      // 将切片d写入Buffer尾部

b.WriteString(s string) (n int, err error) // 将字符串s写入Buffer尾部

b.WriteByte(c byte) error    // 将字符c写入Buffer尾部,var c byte = 'a' 

b.WriteRune(r rune) (n int, err error)    // 将一个rune类型的数据放到缓冲器的尾部 var r rune 'a'

b.ReadForm(i io.Reader) (n int64, err error) // 将文件中的内容写入Buffer
file, _ := os.Open("1.txt")    

buf := bytes.NewBufferString("Hello world")    

buf.ReadFrom(file)              //将text.txt内容追加到缓冲器的尾部    

fmt.Println(buf.String())

从Buffer中写出到io.Writer(缓冲器变小)

b.WriteTo(w io.Writer) (n int64, err error)  // 将Buffer中的内容输出到实现了io.Writer接口的可写入对象中;也可以使用fmt.Fprintf(file, buf.String())

从Buffer中读取数据到指定容器(缓冲器变小)

c := make([]byte,8)

b.Read(c) (n int, err error)     //一次从Buffer中读取len(c)个byte到容器c中,每次读取新的len(c)个byte覆盖c中原来的内容,b读出后会清空缓存中的已读出的部分,Buffer中仅剩余未读取的数据,成功返回实际读取的字节数,off 向后偏移 n,buffer 没有数据返回错误 io.EOF

b.ReadByte() (byte, error)   //读取第一个byte,Buffer的第1个byte被拿掉

b.ReadRune() (r rune, size int, err error)  //读取第一个 UTF8 编码的字符并返回该字符和该字符的字节数,b的第1个rune被拿掉,如果buffer为空,返回错误 io.EOF,如果不是UTF8编码的字符,则消费一个字节,返回 (U+FFFD,1,nil)	

b.ReadBytes(delimiter byte) (line []byte, err error)  //需要一个byte作为分隔符,读取缓冲区第一个分隔符(delim)前面的内容以及分隔符并返回,缓冲区会清空读取的内容。如果没有发现分隔符,则返回读取的内容并返回错误io.EOF,

b.ReadString(delimiter byte) (line string, err error) //需要一个byte作为分隔符,读取缓冲区第一个分隔符(delim)前面的内容以及分隔符并作为字符串返回,缓冲区会清空读取的内容。如果没有发现分隔符,则返回读取的内容并返回错误 io.EOF

b.Next(n int) []byte // 返回前n个byte,原缓冲器变小,如果 buffer 不足 n 字节,则读取全部

其他

b.Bytes() []byte		//返回字节切片

b.Cap() int				//返回 buffer 内部字节切片的容量

b.Grow(n int)			//为 buffer 内部字节切片的容量增加 n 字节

b.Len() int				//返回缓冲区数据长度,等于 len(b.Bytes())

b.Reset() 				//将Buffer清空

b.String() string		//将Buffer中未读取的数据返回成string

b.Truncate(n int)		//丢弃缓冲区中除前n个未读字节以外的所有字节。如果 n 为负数或大于缓冲区长度,则引发 panic

b.UnreadByte() error	//将最后一次读取操作中被成功读取的字节设为未被读取的状态,即将已读取的偏移 off 减 1

b.UnreadRune() error	//将最后一次 ReadRune() 读取操作返回的 UTF8 字符 rune设为未被读取的状态,即将已读取的偏移 off 减去 字符 rune 的字节数


Tags:

最近发表
标签列表