golang bytes.Buffer Reset

本文探讨了Golang中bytes.Buffer结构的Reset方法的行为。通过实例展示,当使用Reset方法后,如果后续写入的数据长度不超过Reset前的长度,原有数据将被覆盖。但若新数据长度超出,则不会影响之前的缓冲区内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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就不会被改写了),可以自行试验。

 

posted on 2016-09-22 00:33  一页天书不分说 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/onebook/p/5894720.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值