You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中如何直接将io.Reader数据复制到bytes.Buffer?

直接将io.Reader数据写入bytes.Buffer的最优方式

你可以直接调用bytes.Buffer的ReadFrom方法替代io.Copy,这个方法会直接利用bytes.Buffer自身的内部缓冲区接收数据,无需额外创建中间缓存。

为什么io.Copy会产生中间缓冲区?

io.Copy的默认逻辑是创建一个临时缓冲区(默认32KB),先从读取器读数据到这个临时缓存,再写入目标写入器。但如果目标写入器实现了io.ReaderFrom接口,io.Copy会直接调用该接口的ReadFrom方法——而bytes.Buffer正好实现了这个接口。

代码示例

把原来的代码:

_, err := io.Copy(dstBytesBuffer, reader)

替换为:

_, err := dstBytesBuffer.ReadFrom(reader)

原理说明

bytes.Buffer.ReadFrom的内部逻辑是直接用自身底层字节切片的空闲区域接收读取器数据:

  1. 检查当前缓冲区的空闲空间,不足时自动扩容
  2. 直接将读取器的数据读入缓冲区的空闲切片段
  3. 更新缓冲区长度,完成写入

这个过程完全跳过了额外的中间缓冲区,直接将数据从读取器复制到目标缓冲区的内存空间,效率更高。

内容的提问来源于stack exchange,提问作者bieno002

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:04:54