簡體   English   中英

使用zlib的gzip文件訪問功能解壓縮文件大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM