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 } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架