GO语言之bytes.buffer_go bytes.buffer_sunansheng的博客-程序员秘密

技术标签: Go语言  GO语言  

bytes.Buffer

bytes.Buffer是一个缓冲byte类型的缓冲器存放着都是byte。

Buffer 是 bytes 包中的一个type Buffer struct{…}

A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use.

Buffer是一个变长的缓冲器,具有 Read 和Write方法。Buffer的零值是一个空的 buffer,但是可以使用)

四种方式创建Buffer缓冲器

四种创建方式:

var b bytes.Buffer  //直接定义一个 Buffer 变量,而不用初始化
b1 := new(bytes.Buffer)   //直接使用 new 初始化,可以直接使用
// 其它两种定义方式
func NewBuffer(buf []byte) *Buffer
func NewBufferString(s string) *Buffer

代码实现:

package main

import (
    "bytes"
    "fmt"
)

func main() {
    //第一种定义方式
    var b bytes.Buffer  //直接定义一个 Buffer 变量,而不用初始化
    b.Write([]byte("Hello ")) // 可以直接使用
    fmt.Println(b.String())
    //第二种定义方式
    c := new(bytes.Buffer)
    c.WriteString("World")
    fmt.Println(c)
    //第三种定义方式
    d := bytes.NewBuffer(nil)
    d.WriteString("这是第三种定义方式")
    fmt.Println(d.String())
    //第四张定义方式
    f := bytes.NewBufferString("这是第四种定义方式")
    fmt.Println(f.String())
}

输出:
Hello 
World
这是第三种定义方式
这是第四种定义方式

向Buffer中写入数据

1.Write,把字节切片p写入到buffer中去。

func main() {
    newBytes := []byte(" go")
    //创建一个内容Learning的缓冲器
    buf := bytes.NewBuffer([]byte("Learning"))
    //将newBytes这个slice写到buf的尾部
    buf.Write(newBytes)
    fmt.Println(buf.String())
}

2.WriteString,使用WriteString方法,将一个字符串放到缓冲器的尾部。

func main() {
    newString := " go"
    //创建一个string内容Learning的缓冲器
    buf := bytes.NewBufferString("Learning")
    //将newString这个string写到buf的尾部
    buf.WriteString(newString)
    fmt.Println(buf.String())
}

从Buffer中读取数据

1.Read,给Read方法一个容器p,读完后,p就满了,缓冲器相应的减少了,返回的n为成功读的数量。

func (b *Buffer) Read(p []byte) (n int, err error) {}

func main() {
    bufs := bytes.NewBufferString("Learning swift.")
    fmt.Println("缓冲器:"+bufs.String())
    l := make([]byte, 5)
    //把bufs的内容读入到l内,因为l容量为5,所以只读了5个过来
    bufs.Read(l)
    fmt.Println("读取到的内容:"+string(l))
    fmt.Println("缓冲器:"+bufs.String())
}

输出:
缓冲器:Learning swift.
读取到的内容:Learn
缓冲器:ing swift.

2.ReadFrom,从一个实现io.Reader接口的r,把r里的内容读到缓冲器里,n返回读的数量。

func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error) {}

func main() {
    file, _ := os.Open("d:/a.txt")
    buf := bytes.NewBufferString("Learning swift.")
    buf.ReadFrom(file)              //将text.txt内容追加到缓冲器的尾部
    fmt.Println(buf.String())
}

输出:
Learning swift.this is text

3.Reset,将数据清空,没有数据可读

func main() {
    bufs := bytes.NewBufferString("现在开始 Learning go.")
    bufs.Reset()
    fmt.Println(bufs.String())
}

声明:Nansheng.Su 发表于 2019-04-28 11:03:00 ,共计399字。

转载请署名:GO语言之bytes.buffer | www.sunansheng.com

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunansheng/article/details/89637316

智能推荐

Unity 对象池和最简单的实现_unity 对象池和ecs_tinySnailer的博客-程序员秘密

对象池对象池顾名思义就是存储对象的容器。主要仅适用于需要大量对象并且使用后就销毁场景,例如射击游戏中子弹,塔防中怪物,大量生成之后就很快销毁。频繁的产生销毁对象,会消耗大量cpu资源,造成游戏卡顿,并且对象存储在堆内存中,是不连续的空间,会造成内存碎片问题,随着运行时间的增加,程序存在闪退的现象。对象池的整体思想对于要大量产生的对象使用一个集合存储起来,并使用一个类来维护这个集...

【Unity&Shader】高光资料总结&2D描边特效资料总结_BuladeMian的博客-程序员秘密

Unity光晕剑效果的Shader简单实现【Unity Shader编程】之十四 边缘发光Shader(Rim Shader)的两种实现形态[Unity3D][NGUI]选中某个图标后高亮高亮效果,使用Shader可以轻松实现【Unity ImageEffect】一个用于角色外边缘发光的效果Shader 边缘发光、变灰、高亮着色器[Unity3D]Unity3D

python和go的场景区别_Python和Go语言的区别总结_weixin_40004502的博客-程序员秘密

Python和Go语言的区别总结什么是Python?Python是一种功能强大的高级编程语言,主要用于科学和工程计算。它是一种高效的语言,优雅务实,简单而强大,适合新手和专业人士的编程。Python支持多种编程范例,并提出了一个大型标准库,包括面向对象,命令式,功能性和程序性。Go是什么?Go是一种通用编程语言,由Google设计;它借鉴了许多其他许多好主意语言,同时避免导致复杂性和不可靠代码的功...

Python——使用 requests 模块爬取网页数据_python爬取网站源码_Paddi_z的博客-程序员秘密

使用requests模块爬取网页数据文章目录使用requests模块爬取网页数据@[toc]1. 爬取静态页面数据1.1 准备工作1.2 各模块代码1.3 完整代码2. 爬取动态页面数据2.1 准备工作2.2 完整代码以下内容根据个人学习总结1. 爬取静态页面数据对于一些静态页面而言,爬取相关数据比较简单,主要思路是首先获取网页链接,然后定位数据源码,最后获取其内容以下任务目标为爬取盗...

java五子棋技术路线,一位老码农的编程简史_超12345的博客-程序员秘密

话说前些日子在微博上看到一个“10年码龄的老码农”QQ群,掐指一算自己从95年接触计算机编程似乎也达到这个标准了,于是突然来了兴致就加入了这个群。这个群真可谓藏龙卧虎,从DOS时期的第一代程序员,到Windows时期的第二代程序员,再到目前互联网时期的第三代程序员,很多重量级的大牛都云集与此,比如简晶、蒋涛、周爱民,会员数在一周内已经达到250人以上,码龄最长的高达25年。看着一帮前辈和同道者们谈...

常见问题2:tkinter点击按钮获取路径_tkinter在代码里返回路径_iqking613的博客-程序员秘密

在GUI里面点击按钮,选择一个文件,在输入框内显示路径用到的全局变量#新建一个窗体程序#导入tkinterimport tkinter,osfrom tkinter import Tkfrom tkinter import filedialognW=tkinter.Tk()nW.title('梨涡的反向工具') #窗口标题nW.geometry('500x300') #窗口尺寸t=tkinter.Text(width=50,height=2)t.pack()glob

随便推点

腾讯x5内核集成,优化web加载速度_x5内核浏览器 打开页面不快_Ricky欧公的博客-程序员秘密

当前移动端Android主流应用开发都会涉及到H5页面的加载,通常使用Android WebKit下的控件WebView。用起来很方便,但往往会碰到加载缓慢导致用户体验差的问题。我们尝试集成x5内核,验证一下是否真的对加载速度有所优化。一、腾讯x5的优势1) 速度快:相比系统webview的网页打开速度有30+%的提升; 2) 省流量:使用云端优化技术使流量节省20+%; 3) 更安全:安全问题

wifi 通过omnipeek 查看 pmf是否生效_weixin_30952535的博客-程序员秘密

给android的wifi设备添加PMF支持时,抓取omnipeek分析。从assoc req 中发现相关标志位没有使能,说明STA 没有使能PMF RSN Capabilities: %0000000000000000 [74-75] xx...... ........ Reserved ...

[开发工具] 史上最全系列之Android开发环境搭建之Android adb_adb开发包安卓_飞驰的芬兰人的博客-程序员秘密

Android之adb环境变量配置下处部分摘自:http://androidzhou.blog.51cto.com/3852858/722118第一种方法:[size=14.44444465637207px](1)在环境变量中,点击Administrator的用户变量(U)中的新建输入[size=14.44444465637207px]例

Xilinx FIFO IP core 使用小结_shanekong的博客-程序员秘密

1. almost full 和 almost empty flags用来指示只剩一个字了。2. Programmable full and empty status flags可以由用户自定义内容设定或者用专用的输入口进行设定。3. 对于V5的block RAM和built-in FIFO可以使用内嵌的寄存器。使用这个寄存器可以提高FIFO的性能,但是增加延迟。4. FI

Android实现dialog时候弹出软键盘dialog移位问题_dazhuoji6250的博客-程序员秘密

Window win = getWindow(); WindowManager.LayoutParams params = win.getAttributes(); win.setSoftInputMode(params.SOFT_INPUT_ADJUST_NOTHING);只需要加上如上代码即可转载于:https://www.cnblo...

jquery操作select下拉框的多种方法(选中,取值,赋值等)_Java程序源的博客-程序员秘密

Query获取Select选择的Text和Value:语法解释:1.$("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发2. varcheckText=$("#select_id").find("option:selected").text();  //获取Select选择的Text3.

推荐文章

热门文章

相关标签