我正在执行以下操作来解压缩压缩数据块:
z_stream stream;
int err;
int nExtraChunks;
uInt destlen;
stream.next_in = (Bytef*)pSrc;
stream.avail_in = (uInt)nSrcLen;
destlen = (uInt)*pnDestLen;
stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.opaque = Z_NULL;
err = inflateInit(&stream);
if (err != Z_OK)
return err;
nExtraChunks = 0;
do {
stream.next_out = pDest;
stream.avail_out = destlen;
err = inflate(&stream, Z_FINISH);
if (err == Z_STREAM_END )
break;
if (err == Z_NEED_DICT || (err == Z_BUF_ERROR && stream.avail_in == 0))
{
err = Z_DATA_ERROR;
}
if (err != Z_BUF_ERROR)
{
inflateEnd(&stream);
return err;
}
nExtraChunks += 1;
} while (stream.avail_out == 0);
*pnDestLen = stream.total_out;
err = inflateEnd(&stream);
if (err != Z_OK) return err;
return nExtraChunks ? Z_BUF_ERROR : Z_OK;
其中pSrc和nSrcLen,pDest和destLen是给定的内存块及其各自的长度。 pSrc保存有效zip文件的内容。
(此例程改编自easyzlib驱动程序函数,但我直接使用NDK提供的zlib。)
对于我进行的每次通话,第一次充气调用都会返回-3(Z_DATA_ERROR)。我已经通过将内存块写入磁盘来确认zip是有效的,并且“adb pull”将其下载到我的mac并将其解压缩。我不太了解zlib ......我该怎么做才能调试它?
答案 0 :(得分:0)
正如我所提到的,我正在使用mac进行开发。我用“zip”压缩文件,这显然是禁止的。尽管“解压缩”和“gunzip”都能很好地处理文件,但事实确实如此。您必须使用gzip来获得Android NDK的libz可以处理的存档。关于“你怎么能调试这种事情”的问题,我仍然没有一个好的答案,所以我坚持使用我的神奇力量直到更好的东西出现。