0
這是一個特定於DEFLATE算法的問題,但涉及到gzip和zlib。從刷新點恢復DEFLATE解壓縮
假設我有一個gzip文件,我知道文件中有幾個刷新點。其中一些是使用Z_SYNC_FLUSH和其他Z_FULL_FLUSH進行的。如果我通過文件掃描,我可以找到所有的沖洗點,因爲他們立即遵循0000ffff的模式。
我知道我可以在Z_FULL_FLUSH點恢復解壓縮,因爲解壓縮所需的所有信息都可用(IE:字典被重置)。但是,如果我試圖從Z_SYNC_FLUSH解壓縮,我通常會得到一個「zlib.error:錯誤-3,同時解壓縮:無效距離太遠」錯誤。
問題是這樣的:如果我嘗試從Z_SYNC_FLUSH點解,我保證可以之一:
- 正確解壓縮塊和後續塊
- 失敗,出現「距離太遠」錯誤
換句話說,我保證我永遠不會以不良數據進行靜默解壓縮(我不是在討論gzip結尾處的CRC32檢查,而是zlib是否會大聲抱怨)?
假設:
- 假設我能夠完全識別刷新點。讓我們假裝我不會將隨機比特識別爲同步標記,也不會將模式恰好出現在類型0塊中。這是不現實的,但只是假設它是真實的。
- 假設文件永遠不會損壞,並且始終是合法的gzip文件。
謝謝。這是我懷疑的。 – DSnet 2013-05-14 04:02:50
作爲後續問題... 在我通過文件中途識別Z_SYNC_FLUSH點的情況下,如果我以某種方式確切地知道前面的32KiB未壓縮數據是什麼,我可以始終使用inflateSetDictionary()從該解壓縮開始上? – DSnet 2013-05-16 04:58:24
是的。 .......... – 2013-05-16 05:20:53