如何将一个bytes.Buffer的内容复制到另一个bytes.Buffer中
Go语言两个bytes.Buffer内容复制的最优实现方案
首先需要纠正你的一个认知误区:标准库的
bytes.Buffer并非没有实现io.Writer接口,只有指针类型*bytes.Buffer实现了io.Writer、io.Reader接口,值类型不满足接口要求。如果你之前调用时直接传入了bytes.Buffer值而非指针,就会触发接口不匹配的报错,这才是你调用io.Copy、io.CopyBuffer失败的核心原因。
场景1:不需要保留源缓冲区src的原有内容
这种场景直接使用io.Copy即可,注意传参要传两个缓冲区的指针:
import "io" // dst、src都是*bytes.Buffer类型 _, err := io.Copy(dst, src)
调用完成后src的所有内容会被移动到dst中,src缓冲区变为空。
场景2:需要保留源缓冲区src的原有内容
这种场景下最优实现是直接调用Write方法写入src的底层字节切片,代码最简洁、性能最高,没有额外的中间对象开销:
// 直接拷贝src的所有内容到dst,src内容不会被修改 dst.Write(src.Bytes())
如果你更倾向于使用io标准库的通用拷贝能力,也可以对src的字节切片做一层只读包装后再拷贝,效果完全一致:
import ( "bytes" "io" ) _, err := io.Copy(dst, bytes.NewReader(src.Bytes()))
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

