问题内容 我有代码想要将数据从 io.Reader 直接复制到 bytes.Buffer 结构,该结构旨在作为缓存保留在内存中。现在我只是调用 io.Copy(dstBytesBuff
我有代码想要将数据从 io.Reader 直接复制到 bytes.Buffer 结构,该结构旨在作为缓存保留在内存中。现在我只是调用 io.Copy(dstBytesBuffer, reader)
。但查看 io.Copy 代码,它看起来像是在创建一个缓冲区本身,并将数据从读取器复制到该缓冲区中,然后从该缓冲区写入我的 dstBytesBuffer。有没有办法跳过它,直接将其从阅读器复制到我的目标缓冲区?
使用 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 的正确方法是什么?的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: 将数据从 io.Reader 直接复制到 golang 中的目标 bytes.Buffer 的正确方法是什么?
本文链接: https://lsjlt.com/news/561068.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0