我遵循http://zlib.net/zlib_how.html的zlib充氣示例來解壓縮壓縮文件。即使在我將CHUNK大小定義爲256KB後,我看到每個inflate()函數調用的輸出數據僅爲8KB。我知道使用8K的CHUNK大小縮小了壓縮文件,這是否意味着zlib充氣的CHUNK大小必須與通縮時使用的大小相同?zlib充氣CHUNK尺寸必須與通貨時使用的尺寸相同嗎?
如果是的話,無需更改源文件,是否有加快解壓?使用8K的CHUNK大小來解壓縮很慢。
我遵循http://zlib.net/zlib_how.html的zlib充氣示例來解壓縮壓縮文件。即使在我將CHUNK大小定義爲256KB後,我看到每個inflate()函數調用的輸出數據僅爲8KB。我知道使用8K的CHUNK大小縮小了壓縮文件,這是否意味着zlib充氣的CHUNK大小必須與通縮時使用的大小相同?zlib充氣CHUNK尺寸必須與通貨時使用的尺寸相同嗎?
如果是的話,無需更改源文件,是否有加快解壓?使用8K的CHUNK大小來解壓縮很慢。
不,塊大小不必是相同的。有效的deflate流可以通過使用任何塊大小的inflate來解碼。
即使在我所定義的塊大小爲256KB,我看到的 的輸出數據的每個充氣()函數調用是僅8KB。
從評論中的討論,你沒有單一的deflate流,而是一系列小deflate流的串聯。做膨脹,你需要簡單地重新啓動充氣過程每次你完成一個流,Z_STREAM_END
由inflate()
返回表示。使用inflateReset()
而不是inflateEnd()
,然後使用inflateInit()
,因爲這樣可以節省時間並避免不必要的空閒和內存分配。
除此之外,沒有辦法加速解壓。
謝謝馬克。我試圖調試我的問題。我在代碼中看到的是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
來自'inflate()'的返回碼是什麼? –
返回碼是Z_STREAM_END。 – JustDance