參考原文:go語言的bytes.buffer bash
bytes.buffer是一個緩衝byte類型的緩衝器ui
一、使用bytes.NewBuffer建立:參數是[]byte的話,緩衝器裏就是這個slice的內容;若是參數是nil的話,就是建立一個空的緩衝器。spa
二、bytes.NewBufferString建立.net
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)
}複製代碼
若是buffer在new的時候是空的,能夠用Write在尾部寫入code
一、Write方法,將一個byte類型的slice放到緩衝器的尾部blog
//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)
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類型的數據放到緩衝器的尾部字符串
//func (b *Buffer) WriteByte(c byte) error
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類型的數據放到緩衝器的尾部get
// 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好
}複製代碼
WriteTo方法,將一個緩衝器的數據寫到w裏,w是實現io.Writer的,好比os.Filestring
func main(){
file,_ := os.Create("text.txt")
buf := bytes.NewBufferString("hello world")
buf.WriteTo(file)
//或者使用寫入,fmt.Fprintf(file,buf.String())
}複製代碼
一、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
}
複製代碼
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) []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
}
複製代碼