2013-06-11 87 views
0

我遵循http://zlib.net/zlib_how.html的zlib充氣示例來解壓縮壓縮文件。即使在我將CHUNK大小定義爲256KB後,我看到每個inflate()函數調用的輸出數據僅爲8KB。我知道使用8K的CHUNK大小縮小了壓縮文件,這是否意味着zlib充氣的CHUNK大小必須與通縮時使用的大小相同?zlib充氣CHUNK尺寸必須與通貨時使用的尺寸相同嗎?

如果是的話,無需更改源文件,是否有加快解壓?使用8K的CHUNK大小來解壓縮很慢。

回答

0

不,塊大小不必是相同的。有效的deflate流可以通過使用任何塊大小的inflate來解碼。

即使在我所定義的塊大小爲256KB,我看到的 的輸出數據的每個充氣()函數調用是僅8KB。

從評論中的討論,你沒有單一的deflate流,而是一系列小deflate流的串聯。做膨脹,你需要簡單地重新啓動充氣過程每次你完成一個流,Z_STREAM_ENDinflate()返回表示。使用inflateReset()而不是inflateEnd(),然後使用inflateInit(),因爲這樣可以節省時間並避免不必要的空閒和內存分配。

除此之外,沒有辦法加速解壓。

+0

謝謝馬克。我試圖調試我的問題。我在代碼中看到的是CHUNK大小爲256KB。在調用inflate()之前,avail_in是54K數據,avail_out是256K; inflate()調用後,avail_in爲53K數據,avail_out爲(256-8)K。基本上只有1K數據通過inflate()進行解壓縮,並且僅生成8K數據。所以它會退出內部循環,因爲avail_out!= 0。仍試圖找出爲什麼不是所有的輸入數據都解壓縮。 – JustDance

+0

來自'inflate()'的返回碼是什麼? –

+0

返回碼是Z_STREAM_END。 – JustDance