• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

gobytes包详解

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一:创建缓冲器

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
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go语言---传值和传引用发布时间:2022-07-10
下一篇:
windows为GO设置代理解决go get缓慢发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap