golang的bytes.buffer

参考原文:go语言的bytes.buffer 

1、建立缓冲期

bytes.buffer是一个缓冲byte类型的缓冲器bash

一、使用bytes.NewBuffer建立:参数是[]byte的话,缓冲器里就是这个slice的内容;若是参数是nil的话,就是建立一个空的缓冲器。spa

二、bytes.NewBufferString建立.net

三、bytes.Buffer{} code

func main(){ buf1 := bytes.NewBufferString("hello") buf2 := bytes.NewBuffer([]byte("hello")) buf3 := bytes.NewBuffer([]byte{'h','e','l','l','o'}) 以上三者等效,输出//hello buf4 := bytes.NewBufferString("") buf5 := bytes.NewBuffer([]byte{}) 以上二者等效,输出//"" fmt.Println(buf1.String(),buf2.String(),buf3.String(),buf4,buf5,1) }复制代码

 

2、写入到缓冲器

若是buffer在new的时候是空的,能够用Write在尾部写入blog

一、Write方法,将一个byte类型的slice放到缓冲器的尾部接口

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

func main(){ s := []byte(" world") buf := bytes.NewBufferString("hello") fmt.Println(buf.String()) //hello buf.Write(s) //将s这个slice添加到buf的尾部 fmt.Println(buf.String()) //hello world } 复制代码

 

二、WriteString方法,把一个字符串放到缓冲器的尾部字符串

 //func (b *Buffer) WriteString(s string)(n int,err error)get

func main(){ s := " world" buf := bytes.NewBufferString("hello") fmt.Println(buf.String()) //hello buf.WriteString(s) //将string写入到buf的尾部 fmt.Println(buf.String()) //hello world } 复制代码

 

三、WriteByte方法,将一个byte类型的数据放到缓冲器的尾部string

 //func (b *Buffer) WriteByte(c byte) errorit

func main(){ var s byte = '?' buf := bytes.NewBufferString("hello") fmt.Println(buf.String()) //把buf的内容转换为string,hello buf.WriteByte(s) //将s写到buf的尾部 fmt.Println(buf.String()) //hello? }复制代码

 

四、WriteRune方法,将一个rune类型的数据放到缓冲器的尾部

// func (b *Buffer) WriteRune(r Rune) (n int,err error)

func main(){ var s rune = '好' buf := bytes.NewBufferString("hello") fmt.Println(buf.String()) //hello buf.WriteRune(s) fmt.Println(buf.String()) //hello好 }复制代码

3、从缓冲器写出

WriteTo方法,将一个缓冲器的数据写到w里,w是实现io.Writer的,好比os.File

 func main(){

 file,_ := os.Create("text.txt") buf := bytes.NewBufferString("hello world") buf.WriteTo(file) //或者使用写入,fmt.Fprintf(file,buf.String()) }复制代码

 

4、读出缓冲器

一、Read方法,给Read方法一个容器,读完后p就满了,缓冲器相应的减小。

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

func main(){ s1 := []byte("hello") buff := bytes.NewBuffer(s1) s2 := []byte(" world") buff.Write(s2) fmt.Println(buff.String()) //hello world s3 := make([]byte,3) buff.Read(s3) //把buff的内容读入到s3,s3的容量为3,读了3个过来 fmt.Println(buff.String()) //lo world fmt.Println(string(s3)) //hel buff.Read(s3) //继续读入3个,原来的被覆盖 fmt.Println(buff.String()) //world fmt.Println(string(s3)) //"lo " } 复制代码

 

二、ReadByte方法,返回缓冲器头部的第一个byte,缓冲器头部第一个byte取出

//func (b *Buffer) ReadByte() (c byte,err error)

func main(){ buf := bytes.NewBufferString("hello") fmt.Println(buf.String()) b,_ := buf.ReadByte() //取出第一个byte,赋值给b fmt.Println(buf.String()) //ello fmt.Println(string(b)) //h } 复制代码

 

三、ReadRune方法,返回缓冲器头部的第一个rune

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

func main(){ buf := bytes.NewBufferString("你好smith") fmt.Println(buf.String()) b,n,_ := buf.ReadRune() //取出第一个rune fmt.Println(buf.String()) //好smith fmt.Println(string(b)) //你 fmt.Println(n) //3,"你“做为utf8存储占3个byte b,n,_ = buf.ReadRune() //再取出一个rune fmt.Println(buf.String()) //smith fmt.Println(string(b)) //好 fmt.Println(n) //3 } 复制代码

 

四、ReadBytes方法,须要一个byte做为分隔符,读的时候从缓冲器里找出第一个出现的分隔符,缓冲器头部开始到分隔符之间的byte返回。

//func (b *Buffer) ReadBytes(delim byte) (line []byte,err error)

func main(){ var d byte = 'e' //分隔符 buf := bytes.NewBufferString("你好esmieth") fmt.Println(buf.String()) //你好esmieth b,_ := buf.ReadBytes(d) //读到分隔符,并返回给b fmt.Println(buf.String()) //smieth fmt.Println(string(b)) //你好e } 复制代码

 

五、ReadString方法,和ReadBytes方法同样

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

func main(){ var d byte = 'e' buf := bytes.NewBufferString("你好esmieth") fmt.Println(buf.String()) //你好esmieth b,_ := buf.ReadString(d) //读取到分隔符,并返回给b fmt.Println(buf.String()) //smieth fmt.Println(string(b)) //你好e } 复制代码

5、读入缓冲器

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

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

func main(){ file, _ := os.Open("text.txt") buf := bytes.NewBufferString("bob ") buf.ReadFrom(file) fmt.Println(buf.String()) //bob hello world }复制代码

6、从缓冲器取出

Next方法,返回前n个byte(slice),原缓冲器变小

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

func main(){ buf := bytes.NewBufferString("hello world") fmt.Println(buf.String()) b := buf.Next(2) //取前2个 fmt.Println(buf.String()) //llo world fmt.Println(string(b)) //he } 复制代码
相关文章
相关标签/搜索