![](/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.