我是否可以在内存中读取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