2014-09-04 125 views
0

解壓縮一些gzip數據時出現問題。我有一個指向動態分配char字符串的數組。這個數組的每個元素都是我想要解壓縮的gzip文件的一部分。 我首先想到的是將這些字符串連接成一個,然後解壓縮數據,但是我想避免這種方法,因爲需要大量的複製。使用zlib庫進行gzip解壓縮

所以問題是:有什麼辦法解壓縮數據分爲幾個部分,使用zlib庫?我試圖這樣做,但是當我解壓縮第一部分時,我得到了Z_DATA_ERROR - 這是正常的,因爲數據不完整。有沒有什麼辦法可以「等待」剩下的數據進行解壓縮?

+1

你見過這個嗎? https://hewgill.com/journal/entries/349-how-to-decompress-gzip-stream-with-zlib你應該可以多次調用'inflate()'塊來逐個解壓。 .. – 2014-09-04 13:01:46

+0

是的,我沒有問題解壓縮gzip文件時,它是在一塊。我只是想知道如果我在少數幾個部分使用它,該怎麼做。我想一個一個地做,但是當我解壓縮第一部分時,我得到了Z_DATA_ERROR,因爲它沒有完成,因此它沒有解壓。 – user3131037 2014-09-04 13:04:24

+1

檢查[參考中的高級函數](http://www.zlib .net/manual.html#Advanced),你會發現'inflateBack'函數使用回調來讀寫數據。 – 2014-09-04 13:05:05

回答

1

是的。您可以簡單地以適當的順序連續調用每個字符串inflate()。對於每次調用inflate(),可以爲壓縮數據提供不同的指針和長度。每次,確保您首先使用所有生成的未壓縮數據,並且avail_in爲零,然後再轉到下一個輸入塊。

如果您得到的是Z_DATA_ERROR這意味着要麼您沒有正確重組原始流,要麼原始流不是gzip流。

請注意,要解壓縮gzip流,您需要使用inflateInit2()進行初始化並正確設置參數以請求gzip解壓縮。