2011-05-31 26 views
0

我做下面解壓縮壓縮數據塊:的Android NDK的zlib返回Z_DATA_ERROR爲有效的壓縮信息

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)爲每一個呼叫我作出。我已經確認,通過將內存塊寫入磁盤,並通過「adb pull」將其下載到我的mac並對其進行槍劈,zip文件是有效的。我不太瞭解zlib ......我能做些什麼來調試呢?

回答

0

正如我所提到的,我正在使用mac進行開發。我用「zip」壓縮了這些文件,這顯然是一個禁忌。儘管「unzip」和「gunzip」處理文件的事實都是如此。您必須使用gzip來結束Android NDK的libz可以處理的檔案。至於「你怎麼能調試這樣的事情」這個問題,我仍然沒有一個好的答案,所以我堅持使用我的魔力,直到更好的東西出現。