go bytes包詳解


一:創建緩沖器

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
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM