卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章33926本站已运行390

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

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

问题内容

我有代码想要将数据从 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 读取而不创建或使用额外的缓冲区。

卓越飞翔博客
上一篇: 这里可能会出现恐慌吗?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏