一:建立緩沖器
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)
}
四、讀出緩沖器
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 "
}
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"
)
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
}