go bytes包详解

一:创建缓冲器

bytes.buffer是一个缓冲byte类型的缓冲器

1、使用bytes.NewBuffer创建:参数是[]byte的话,缓冲器里就是这个slice的内容;如果参数是nil的话,就是创建一个空的缓冲器。

2、bytes.NewBufferString创建

3、bytes.Buffer{} 

代码演示 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)
}

二:写入到缓冲器

1
2
3
4
5
6
7
8
9
10
11
12
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
}
1
2
3
4
5
6
7
8
9
10
11
12
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类型的数据放到缓冲器的尾部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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类型的数据放到缓冲器的尾部

1
2
3
4
5
6
7
8
9
10
11
12
13
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

1
2
3
4
5
6
7
8
9
10
package main
import (
    "bytes"
    "os"
)
func main() {
    file,_ := os.Create("text.txt")
    buf := bytes.NewBufferString("hello world")
    buf.WriteTo(file)
}

四、读出缓冲器

1、Read方法,给Read方法一个容器,读完后p就满了,缓冲器相应的减少

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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取出

1
2
3
4
5
6
7
8
9
10
11
12
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

1
2
3
4
5
6
7
8
9
10
11
12
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
}

五、读入缓冲器

1
2
3
4
5
6
7
8
9
10
11
12
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
}

六、从缓冲器取出

1
2
3
4
5
6
7
8
9
10
11
12
13
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
}

posted on   孤灯引路人  阅读(873)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示