我有代码想要将数据从 io.Reader 直接复制到 bytes.Buffer 结构,该结构旨在作为缓存保留在内存中。现在我只是调用 io.Copy(dstBytesBuffer, reader)
。但查看 io.Copy 代码,它看起来像是在创建一个缓冲区本身,并将数据从读取器复制到该缓冲区中,然后从该缓冲区写入我的 dstBytesBuffer。有没有办法跳过它,直接将其从阅读器复制到我的目标缓冲区?io.Copy(dstBytesBuffer, reader)
。但查看 io.Copy 代码,它看起来像是在创建一个缓冲区本身,并将数据从读取器复制到该缓冲区中,然后从该缓冲区写入我的 dstBytesBuffer。有没有办法跳过它,直接将其从阅读器复制到我的目标缓冲区?
使用 io.Copy()
就可以了。 io.Copy()
io.Copy()
就可以了。 io.Copy()
针对多个用例进行了“优化”。引用其文档:将副本从 src 复制到 dst,直到 src 达到 EOF 或发生错误。它返回复制的字节数以及复制时遇到的第一个错误(如果有)。
成功的复制返回 err == nil,而不是 err == EOF。因为 Copy 被定义为从 src 读取直到 EOF,所以它不会将 Read 中的 EOF 视为要报告的错误。
如果src实现了WriterTo接口,则通过调用src.WriteTo(dst)来实现复制。否则,如果dst实现了ReaderFrom接口,则通过调用dst.ReadFrom(src)来实现复制。io.Reader
,即使它没有提供一个高效的 phpcncphpcnWriteTo(dst) 方法,我们肯定知道你的目的地是 bytes.Buffer
并且它实现io.ReaderFrom
因为它有一个 Buffer.ReadFrom()
方法从给定的 io.Reader
以上是将数据从 io.Reader 直接复制到 golang 中的目标 bytes.Buffer 的正确方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!