一:創建緩沖器
bytes.buffer是一個緩沖byte類型的緩沖器
1、使用bytes.NewBuffer創建:參數是[]byte的話,緩沖器里就是這個slice的內容;如果參數是nil的話,就是創建一個空的緩沖器。
2、bytes.NewBufferString創建
3、bytes.Buffer{}
代碼演示
package main import ( "bytes" "fmt" ) 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) }
二:寫入到緩沖器
package main import ( "bytes" "fmt" ) 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 }
package main import ( "bytes" "fmt" ) func main() { s := " world" buf := bytes.NewBufferString("hello") fmt.Println(buf.String()) //hello buf.WriteString(s) //將string寫入到buf的尾部 fmt.Println(buf.String()) //hello world }
3、WriteByte方法,將一個byte類型的數據放到緩沖器的尾部
package main import ( "bytes" "fmt" ) 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? }
4、WriteRune方法,將一個rune類型的數據放到緩沖器的尾部
package main import ( "bytes" "fmt" ) 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.File
package main import ( "bytes" "os" ) func main() { file,_ := os.Create("text.txt") buf := bytes.NewBufferString("hello world") buf.WriteTo(file) }
四、讀出緩沖器
1、Read方法,給Read方法一個容器,讀完后p就滿了,緩沖器相應的減少
package main import ( "bytes" "fmt" ) 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 " }
2、ReadByte方法,返回緩沖器頭部的第一個byte,緩沖器頭部第一個byte取出
package main import ( "bytes" "fmt" ) 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 }
3、ReadRune方法,返回緩沖器頭部的第一個rune
package main import ( "bytes" "fmt" ) 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 }
五、讀入緩沖器
package main import ( "bytes" "fmt" "os" ) func main() { file, _ := os.Open("text.txt") buf := bytes.NewBufferString(" ") buf.ReadFrom(file) fmt.Println(buf.String()) //bob hello world }
六、從緩沖器取出
package main import ( "bytes" "fmt" ) 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 }