![](/img/trans.png)
[英]boost filtering_istream gzip_decompressor uncompressed file size
[英]Uncompressed file size using zlib's gzip file access function
使用linux命令行工具gzip我可以使用gzip -l
告诉压缩文件的未压缩大小。
我在zlib手册部分“gzip文件访问函数”中找不到任何类似的函数。
在这个链接上,我找到了一个解决方案http://www.abeel.be/content/determine-uncompressed-size-gzip-file ,它涉及读取文件的最后4个字节,但我现在正在避免它,因为我更喜欢使用lib的功能。
没有可靠的方法来获取gzip文件的未压缩大小而不解压缩,或至少解码整个事物。 有三个原因。
首先,关于未压缩长度的唯一信息是gzip文件末尾的四个字节(以little-endian顺序存储)。 必要时,这是模数2 32的长度。 因此,如果未压缩的长度为4 GB或更多,您将无法知道长度是多少。 只能是肯定的是未压缩的长度小于4 GB如果压缩长度小于像2 一千零三十二分之三十二 + 18,或约4 MB。 (1032是放气的最大压缩系数。)
其次,更糟糕的是,gzip文件实际上可能是多个gzip流的串联。 除了解码之外,没有办法找到每个gzip流结束的位置,以便查看该块的四字节未压缩长度。 (由于第一个原因,这可能是错误的。)
第三,gzip文件有时会在gzip流结束后出现垃圾(通常为零)。 那么最后四个字节不是长度。
所以gzip -l
无论如何都没有用。 因此,在zlib中提供该功能毫无意义。
pigz可以选择实际解码整个输入以获得实际的未压缩长度: pigz -lt
,这可以保证正确的答案。 pigz -l
执行gzip -l
pigz -l
所做的事情,这可能是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.