gpt4 book ai didi

c++ - 使用 zlib 的 gzip 文件访问功能的未压缩文件大小

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:28 25 4
gpt4 key购买 nike

使用 linux 命令行工具 gzip 我可以使用 gzip -l 知道压缩文件的未压缩大小。

我在 zlib 手册的“gzip 文件访问函数”部分找不到类似的函数。

在这个链接上,我找到了一个解决方案 http://www.abeel.be/content/determine-uncompressed-size-gzip-file这涉及读取文件的最后 4 个字节,但我现在正在避免它,因为我更喜欢使用 lib 的函数。

最佳答案

没有可靠的方法可以在不解压缩或至少解码整个文件的情况下获取 gzip 文件的未压缩大小。原因有以下三个。

首先,关于未压缩长度的唯一信息是 gzip 文件末尾的四个字节(以小端顺序存储)。必然地,这是长度模 232。因此,如果未压缩的长度为 4 GB 或更多,您将不知道长度是多少。如果压缩长度小于 232/1032 + 18 或大约 4 MB,则只能确定未压缩长度小于 4 GB。 (1032是deflate的最大压缩因子。)

其次,更糟糕的是,一个 gzip 文件实际上可能是多个 gzip 流的串联。除了解码之外,没有办法找到每个 gzip 流的结束位置,以便查看该片段的四字节未压缩长度。 (由于第一个原因,这可能是错误的。)

第三,gzip 文件有时会在 gzip 流结束后出现垃圾(通常为零)。那么最后四个字节不是长度。

所以 gzip -l 无论如何都不起作用。因此,在 zlib 中提供该功能毫无意义。

pigz有一个选项实际上解码整个输入以获得实际的未压缩长度:pigz -lt,这保证了正确的答案。 pigz -l 执行 gzip -l 的操作,这可能是错误的。

关于c++ - 使用 zlib 的 gzip 文件访问功能的未压缩文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com