golang bytes.Buffer Reset

func t() {
    a := []byte{‘1‘, ‘2‘}
    buf := new(bytes.Buffer)
    buf.Write(a)
    b := buf.Bytes()
    fmt.Println(b)
    buf.Reset()
    c := []byte{‘3‘}
    buf.Write(c)
    fmt.Println(b)
}

上面运行结果是

[49 50]
[51 50]

--> 结论:

bytes.Buffer Reset之后,如果再写入新的数据,如果数据的长度没有超过Reset之前缓冲区的长度,那么Buffer内部不会重新开辟内存,也就是说,

写入的数据会覆盖之前的数据。

在本例中,这里【之前的数据】就是那个 b , 很明显它的第一个字节已经被修改了。

--> 如果你写入的数据长度超过前面的长度,那么就不会这样了(b就不会被改写了),可以自行试验。

时间: 2024-12-17 18:30:10

golang bytes.Buffer Reset的相关文章

golang bytes buffer代码剖析

//上数据结构,bytes Buffer type Buffer struct { buf       []byte            // byte切片 off       int               // 从&buf[off]地址读数据, 从&buf[len(buf)]地址写数据 runeBytes [utf8.UTFMax]byte // avoid allocation of slice on each WriteByte or Rune bootstrap [64]b

Golang之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 方法. Buf

GoLang之buffer与bytes包

strings包 strings包的使用举例: package main import s "strings" import "fmt" var p = fmt.Println func main() { p("Contains: ", s.Contains("test", "es")) p("Count: ", s.Count("test", "t&quo

golang的bytes.buffer

参考原文:go语言的bytes.buffer 一.创建缓冲期 bytes.buffer是一个缓冲byte类型的缓冲器 1.使用bytes.NewBuffer创建:参数是[]byte的话,缓冲器里就是这个slice的内容:如果参数是nil的话,就是创建一个空的缓冲器. 2.bytes.NewBufferString创建 3.bytes.Buffer{} func main(){ buf1 := bytes.NewBufferString("hello") buf2 := bytes.Ne

golang bytes包解读

golang中的bytes标准库实现了对字节数组的各种操作,与strings标准库功能基本类似. 功能列表:1.字节切片 处理函数 (1).基本处理函数(2).字节切片比较函数(3).前后缀检查函数(4).字节切片位置索引函数(5).分割函数(6).大小写处理函数(7).子字节切片处理函数2.Buffer 对象3.Reader 对象 基本处理函数Contains() :返回是否包含子切片func Contains(b, subslice []byte) bool 案例:执行结果:[email p

golang bytes 包 详解

概况: 包字节实现了操作字节切片的函数.它类似于琴弦包的设施. 函数: func Compare(a, b []byte) int func Contains(b, subslice []byte) bool func ContainsAny(b []byte, chars string) bool func ContainsRune(b []byte, r rune) bool func Count(s, sep []byte) int func Equal(a, b []byte) bool

使用Golang实现简单Ping过程

引言 关于各种语言实现Ping已经是大家喜闻乐见的事情了,网络上利用Golang实现Ping已经有比较详细的代码示例,但大多是仅仅是实现了Request过程,而对Response的回显内容并没有做接收.而Ping程序不仅仅是发送一个ICMP,更重要的是如何接收并进行统计. 下面是网络上几篇关于Ping的实现代码: https://github.com/paulstuart/ping/blob/master/ping.go http://blog.csdn.net/gophers/article/

Golang标准库之Buffer

Buffer Go标准库Buffer是一个可变大小的字节缓冲区,可以用Wirte和Read方法操作它,在Go标准库中,定义了如下关于Buffer的数据结构. type Buffer struct { buf []byte // contents are the bytes buf[off : len(buf)] off int // read at &buf[off], write at &buf[len(buf)] runeBytes [utf8.UTFMax]byte // avoid

[golang]内存不断增长bytes.makeSlice

golang写的一个图片服务器,在批量下载压缩时候发现内存不断增长.... 幸好golang自带内存占用日志结合分析工具可以方便看到内存分布. 详细可参考: http://blog.golang.org/profiling-go-programs 可以实时统计CPU\内存信息. 这里主要说一下内存怎么搞.CPU分析的参考之前的一篇文章. //需要包含这个pprof包 import "runtime/pprof" //这里接收内存统计信息保存文件 var memprofile = fla