2014-09-04 151 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解压缩。