使用zlib库进行gzip解压缩

时间:2014-09-04 12:52:49

标签: c gzip zlib compression

解压缩一些gzip数据时遇到问题。我有一个数组,指向动态分配的char字符串。此数组的每个元素都是我要解压缩的gzip文件的一部分。 我想到的第一件事是将这些字符串连接到一个,然后解压缩数据,但我想避免这种方法,因为大量的复制。

所以问题是:有没有办法解压缩分成几个部分的数据,使用zlib库?我试图这样做,但当我解压缩第一部分时,我得到Z_DATA_ERROR - 这是正常的,因为数据不完整。有没有办法“等待”其余的数据进行解压缩?

1 个答案:

答案 0 :(得分:1)

是。您只需按适当的顺序依次为每个字符串调用inflate()即可。对于inflate()的每次调用,您可以为压缩数据提供不同的指针和长度。每次都要确保首先使用生成的所有未压缩数据,并且avail_in为零,然后再转到下一个输入块。

如果您收到Z_DATA_ERROR,则表示您没有正确地重新组合原始流,或者原始流不是gzip流。

请注意,要解压缩gzip流,您需要使用inflateInit2()进行初始化并相应地设置参数以请求gzip解压缩。