我是否可以在內存中讀取zlib壓縮文件而不實際將其提取到磁盤?如果你能提供一個片段,這將是很好的。使用zlib進行內存解壓縮
4
A
回答
0
是的,你可以; zlib通常用於嵌入式系統中,將應用程序映像從ROM解壓縮到RAM中 - 完全是從內存到內存的操作。
zlib文檔描述了必要的調用。
15
這裏是一個zLib充氣例程,它將內存中的緩衝區解壓縮到提供的輸出緩衝區中。這是一個「一次性」功能,因爲它試圖一次膨脹整個輸入緩衝區,並假定你已經給了它足夠的空間來適應所有。也可以根據需要編寫一個動態增長目標緩衝區的多鏡頭功能。
int inflate(const void *src, int srcLen, void *dst, int dstLen) {
z_stream strm = {0};
strm.total_in = strm.avail_in = srcLen;
strm.total_out = strm.avail_out = dstLen;
strm.next_in = (Bytef *) src;
strm.next_out = (Bytef *) dst;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
int err = -1;
int ret = -1;
err = inflateInit2(&strm, (15 + 32)); //15 window bits, and the +32 tells zlib to to detect if using gzip or zlib
if (err == Z_OK) {
err = inflate(&strm, Z_FINISH);
if (err == Z_STREAM_END) {
ret = strm.total_out;
}
else {
inflateEnd(&strm);
return err;
}
}
else {
inflateEnd(&strm);
return err;
}
inflateEnd(&strm);
return ret;
}
說明:
SRC:包含壓縮(gzip的或zlib的)數據
srcLen源緩衝區:源緩衝區的長度
DST:目標緩衝區,將輸出寫入其中
dstLen:目標緩衝區的長度
返回值:
Z_BUF_ERROR:如果dstLen不夠大,以適應膨脹數據
Z_MEM_ERROR:如果有足夠的內存來執行解壓縮
Z_DATA_ERROR:如果輸入數據被損壞
否則,返回值是寫入dst的字節數。
相關問題
- 1. 使用zlib庫進行gzip解壓縮
- 2. 使用zlib解壓縮PNG
- 3. 解壓縮Zlib
- 4. ZLIB解壓縮
- 5. zlib/libz.dylib解壓縮
- 6. Zlib解壓縮C++
- 7. zlib壓縮和解壓
- 8. 使用zlib版本1.1.3解壓縮內存中的gzip文件
- 9. 的zlib壓縮/解壓縮Linux編程
- 10. 使用zlib時解壓縮錯誤
- 11. 解壓縮zlib編碼nsdata
- 12. 使用zlib和cPickle將字典壓縮/解壓縮到文件
- 13. 未定義的引用進行解壓縮的zlib的Android JNI
- 14. 用pako壓縮(javascript中的zlib),用zlib(python)解壓縮不起作用
- 15. 使用Python zlib的解壓縮與JavaScript的zlib
- 16. ZLIB壓縮
- 17. 調用C zlib的解壓縮從C#
- 18. zlib是否允許從文件中間進行解壓縮
- 19. 使用LZMA解壓縮內存
- 20. 在Nodejs中使用zlib壓縮和解壓數據
- 21. 在c#中使用zlib壓縮文件時解壓文件
- 22. 如何使用pigz進行解壓縮
- 23. zlib壓縮錯誤
- 24. ASIHTTPRequest的zlib壓縮
- 25. 如何在Java中使用LZMA SDK進行壓縮/解壓縮
- 26. 爲什麼用zlib解壓縮http gzip內容失敗? (C++)
- 27. 'zlib'的解壓縮()返回Z_DATA_ERROR
- 28. 的Zlib解壓縮回報Z_DATA_ERROR
- 29. zlib不同的解壓縮大小
- 30. 如何解壓縮的zlib的NSData
你有沒有嘗試過你自己呢?只是提示:「請提供代碼」是尋求幫助的不好方法。沒有人願意免費爲你做你的工作,但人們確實希望幫助你解決一個你無法弄清楚的問題。用這種方式來說出你的問題以獲得更好的結果 – 2011-02-04 19:00:05
如果你嘗試了一下,你會得到更多的幫助,然後告訴我們你卡在哪裏。如果你堅持從哪裏開始,你可以在你的問題中指出你正在考慮的一些想法。 – 2011-02-04 19:00:58
這將是很好的工作,而不是你付出代價;) – 2011-02-04 19:03:45