2011-05-04 59 views
2

我知道這裏有很多問題和解答關於用python zlib或gzip模塊解壓縮數據。但我很好奇gzip如何實現它,因爲gzip基於zlib。
我讀取gzip的源代碼,發現它使用zlib將塊數據塊解壓縮,其中wbits設置爲-15。
但是,當我直接使用帶有wbits -15的zlib進行解壓縮時,它會告訴我「無效塊類型」,只有wbit 15 + 16可以工作。爲什麼我不能使用zlib來解壓字符串像gzip的風格

我知道爲什麼我應該使用15 + 16,但是我不知道爲什麼gzip可以使用-15但我不能。 誰知道mine和gzip模塊之間的實現差異?

回答

2

zlib模塊直接將wbits參數傳遞給實際的zlib庫。在那裏它被稱爲windowBits並記錄在zlib manual。讓我引用相關部分:

對於原始deflate,windowBits也可以是-8 ..- 15。在這種情況下,-windowBits確定窗口大小。然後deflate()會生成沒有zlib頭部或尾部的原始deflate數據,並且不會計算adler32校驗值。

由於gzip模塊執行頭解析和生成本身,它需要告訴zlib以避免它。否則會有兩個zlib頭文件和一個損壞的壓縮文件。

相關問題