golang的bytes.buffer
參考原文:go語言的bytes.buffer?
一、創建緩沖期
bytes.buffer是一個緩沖byte類型的緩沖器
1、使用bytes.NewBuffer創建:參數是[]byte的話,緩沖器里就是這個slice的內容;如果參數是nil的話,就是創建一個空的緩沖器。
2、bytes.NewBufferString創建
func main(){buf1 := bytes.NewBufferString("hello")buf2 := bytes.NewBuffer([]byte("hello"))buf3 := bytes.NewBuffer([]byte{'h','e','l','l','o'})以上三者等效,輸出//hellobuf4 := bytes.NewBufferString("")buf5 := bytes.NewBuffer([]byte{})以上兩者等效,輸出//""fmt.Println(buf1.String(),buf2.String(),buf3.String(),buf4,buf5,1) }復制代碼二、寫入到緩沖器
如果buffer在new的時候是空的,可以用Write在尾部寫入
1、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()) //hellobuf.Write(s) //將s這個slice添加到buf的尾部fmt.Println(buf.String()) //hello world } 復制代碼2、WriteString方法,把一個字符串放到緩沖器的尾部
//func (b *Buffer) WriteString(s string)(n int,err error)func main(){s := " world"buf := bytes.NewBufferString("hello")fmt.Println(buf.String()) //hellobuf.WriteString(s) //將string寫入到buf的尾部fmt.Println(buf.String()) //hello world } 復制代碼3、WriteByte方法,將一個byte類型的數據放到緩沖器的尾部
//func (b *Buffer) WriteByte(c byte) errorfunc main(){var s byte = '?'buf := bytes.NewBufferString("hello") fmt.Println(buf.String()) //把buf的內容轉換為string,hellobuf.WriteByte(s) //將s寫到buf的尾部fmt.Println(buf.String()) //hello? }復制代碼4、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()) //hellobuf.WriteRune(s) fmt.Println(buf.String()) //hello好 }復制代碼三、從緩沖器寫出
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()) }復制代碼四、讀出緩沖器
1、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 worlds3 := make([]byte,3)buff.Read(s3) //把buff的內容讀入到s3,s3的容量為3,讀了3個過來fmt.Println(buff.String()) //lo worldfmt.Println(string(s3)) //helbuff.Read(s3) //繼續讀入3個,原來的被覆蓋fmt.Println(buff.String()) //worldfmt.Println(string(s3)) //"lo " } 復制代碼2、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,賦值給bfmt.Println(buf.String()) //ellofmt.Println(string(b)) //h } 復制代碼3、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() //取出第一個runefmt.Println(buf.String()) //好smithfmt.Println(string(b)) //你fmt.Println(n) //3,"你“作為utf8存儲占3個byteb,n,_ = buf.ReadRune() //再取出一個runefmt.Println(buf.String()) //smithfmt.Println(string(b)) //好fmt.Println(n) //3 } 復制代碼4、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()) //你好esmiethb,_ := buf.ReadBytes(d) //讀到分隔符,并返回給bfmt.Println(buf.String()) //smiethfmt.Println(string(b)) //你好e } 復制代碼5、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()) //你好esmiethb,_ := buf.ReadString(d) //讀取到分隔符,并返回給bfmt.Println(buf.String()) //smiethfmt.Println(string(b)) //你好e } 復制代碼五、讀入緩沖器
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 }復制代碼六、從緩沖器取出
Next方法,返回前n個byte(slice),原緩沖器變小
//func (b *Buffer) Next(n int) []bytefunc main(){buf := bytes.NewBufferString("hello world")fmt.Println(buf.String())b := buf.Next(2) //取前2個fmt.Println(buf.String()) //llo worldfmt.Println(string(b)) //he } 復制代碼轉載于:https://juejin.im/post/5bf909cb51882521c8114523
總結
以上是生活随笔為你收集整理的golang的bytes.buffer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android studio代码对齐的快
- 下一篇: 如何定位“Operating syste