返回顶部
首页 > 资讯 > 后端开发 > GO >将数据从 io.Reader 直接复制到 golang 中的目标 bytes.Buffer 的正确方法是什么?
  • 280
分享到

将数据从 io.Reader 直接复制到 golang 中的目标 bytes.Buffer 的正确方法是什么?

2024-02-05 21:02:00 280人浏览 薄情痞子
摘要

问题内容 我有代码想要将数据从 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,即使它没有提供一个高效的 p​​hpcncPHPcnWriteTo(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

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作