Go语言的bytes.buffer
- 1. bytes.buffer
- 2. 创建一个缓冲器
- 3. 写入到缓冲器(缓冲器变大)
- 3.1. Write—- func (b *Buffer) Write(p []byte) (n int, err error)
- 3.2. WriteString—- func (b *Buffer) WriteString(s string) (n int, err error)
- 3.3. WriteByte—- func (b *Buffer) WriteByte(c byte) error
- 3.4. WriteRune—- func (b *Buffer) WriteRune(r rune) (n int, err error)
- 3.5. 从缓冲器写出(缓冲器变小)
- 3.6. WriteTo—- func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)
- 4. 读出缓冲器(缓冲器变小)
- 4.1. Read—-func (b *Buffer) Read(p []byte) (n int, err error)
- 4.2. ReadByte—- func (b *Buffer) ReadByte() (c byte, err error)
- 4.3. ReadRune—- func (b *Buffer) ReadRune() (r rune, size int, err error)
- 4.4. ReadBytes—- func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
- 4.5. ReadString—- func (b *Buffer) ReadString(delim byte) (line string, err error)
- 5. 读入缓冲器(缓冲器变大)
- 6. 从缓冲器取出(缓冲器变小)
bytes.buffer
bytes.buffer是一个缓冲byte类型的缓冲器,这个缓冲器里存放着都是byte
创建一个缓冲器
NewBuffer
如果在使用bytes.NewBuffer的时候,参数是[]byte的slice的话
缓冲器里就是这个slice的内容,如果参数是nil的话,意思是New一个空的缓冲器里
NewBufferString
还可以用bytes.NewBufferString(“hello”)来建立一个内容是hello的缓冲器
1 | buf1:=bytes.NewBufferString("hello") |
如果buffer在new的时候是空的也没关系,因为可以用Write来写入,写在尾部
写入到缓冲器(缓冲器变大)
Write—- func (b *Buffer) Write(p []byte) (n int, err error)
使用Write方法,将一个byte类型的slice放到缓冲器的尾部
1 | package main |
WriteString—- func (b *Buffer) WriteString(s string) (n int, err error)
使用WriteString方法,将一个字符串放到缓冲器的尾部
1 | package main |
WriteByte—- func (b *Buffer) WriteByte(c byte) error
使用WriteByte方法,将一个byte类型的数据放到缓冲器的尾部
1 | package main |
WriteRune—- func (b *Buffer) WriteRune(r rune) (n int, err error)
使用WriteRune方法,将一个rune类型的数据放到缓冲器的尾部
1 | package main |
从缓冲器写出(缓冲器变小)
WriteTo—- func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)
使用WriteTo方法,将一个缓冲器的数据写到w里,w是实现io.Writer的,比如os.File就是实现io.Writer
1 | package main |
读出缓冲器(缓冲器变小)
Read—-func (b *Buffer) Read(p []byte) (n int, err error)
给Read方法一个容器p,读完后,p就满了,缓冲器相应的减少了,返回的n为成功读的数量
如,缓冲器是一个装满5升水的杯子,这个杯子有Read方法,给Read方法一个3升的杯子
Read完后,5升杯子里有2升水,3升的杯子满了,返回的n为3 在一次Read时,5升杯子里有0升水,3升的杯子还是满的,但其中有2升的水被新倒入的水替代了,返回的n为2
1 | package main |
ReadByte—- func (b *Buffer) ReadByte() (c byte, err error)
返回缓冲器头部的第一个byte,缓冲器头部第一个byte被拿掉
1 | package main |
ReadRune—- func (b *Buffer) ReadRune() (r rune, size int, err error)
ReadRune和ReadByte很像 返回缓冲器头部的第一个rune,缓冲器头部第一个rune被拿掉
1 | package main |
ReadBytes—- func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
ReadBytes和ReadByte根本就不是一回事,MD
ReadBytes需要一个byte作为分隔符,读的时候从缓冲器里找第一个出现的分隔符(delim),找到后,把从缓冲器头部开始到分隔符之间的所有byte进行返回,作为byte类型的slice,返回后,缓冲器也会空掉一部分
1 | package main |
ReadString—- func (b *Buffer) ReadString(delim byte) (line string, err error)
ReadBytes和ReadString基本就是一回事
ReadBytes需要一个byte作为分隔符,读的时候从缓冲器里找第一个出现的分隔符(delim),找到后,把从缓冲器头部开始到分隔符之间的所有byte进行返回,作为字符串,返回后,缓冲器也会空掉一部分
1 | package main |
读入缓冲器(缓冲器变大)
ReadFrom—- func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)
从一个实现io.Reader接口的r,把r里的内容读到缓冲器里,n返回读的数量
1 | package main |
从缓冲器取出(缓冲器变小)
Next —- func (b *Buffer) Next(n int) []byte
返回前n个byte,成为slice返回,原缓冲器变小
1 | package main |
引自waynehu