登录
首页 >  Golang >  Go问答

遇到意外的 EOF:在使用 golang bufio 处理 gzip 文件时的问题

来源:stackoverflow

时间:2024-02-25 17:36:25 451浏览 收藏

本篇文章向大家介绍《遇到意外的 EOF:在使用 golang bufio 处理 gzip 文件时的问题》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

Golang代码在这里:(这里包括4个文件) https://gist.github.com/kmahyyg/02a2da2970001de455f847f4e7525aff

当定义如上时,压缩一个文件(这里是512M,由/dev/urandom中的dd创建的bin)。

如果您使用 SetWriter(out),请尝试将 out 作为 bufio.Writer 传递,但保留结构字段定义为 io.Writer,并与 Reader 部分相同。

然后尝试解压缩,您将收到意外的 EOF 错误。

但是如果你将 out 作为 io.Writer 传递,一切都会好起来的。

压缩功能没有错误。

为什么使用bufio.Writer会导致意外的EOF?

注意:

  • 经过一番观察,似乎小于特定大小的文件(在我的机器上为 337MB)不会出现意外的 EOF。
  • 官方gunzip提取相同的gzip文件导致unexpected EOF只能获取大约前337M部分的数据,然后得到“损坏的文件”消息。

编辑:1.附上完整代码。 2. 截图如下:(以zstd为例,使用gzip时结果相同)


正确答案


@leafbebop 有正确答案。 io.Writer 关闭时不会自动刷新缓冲区。因此,当使用 bufio.Writer 作为 io.Writer 时,必须在关闭之前手动刷新它

以上就是《遇到意外的 EOF:在使用 golang bufio 处理 gzip 文件时的问题》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>