【发布时间】:2012-12-13 20:45:31
【问题描述】:
我正在尝试使用 ObjectiveZlib 示例代码中的 dataByDecompressingData: 方法解压缩一些 zlib 数据,我在转换为与 Objective-c 而非 c++ 一起使用时得到了一些帮助。代码如下
- (NSData*) dataByDecompressingData:(NSData*)data{
Byte* bytes = (Byte*)[data bytes];
NSInteger len = [data length];
NSMutableData *decompressedData = [[NSMutableData alloc] initWithCapacity:COMPRESSION_BLOCK];
Byte* decompressedBytes = (Byte*) malloc(COMPRESSION_BLOCK);
z_stream stream;
int err;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.opaque = (voidpf)0;
stream.next_in = bytes;
err = inflateInit(&stream);
CHECK_ERR(err, @"inflateInit");
while (true) {
stream.avail_in = len - stream.total_in;
stream.next_out = decompressedBytes;
stream.avail_out = COMPRESSION_BLOCK;
err = inflate(&stream, Z_NO_FLUSH);
[decompressedData appendBytes:decompressedBytes length:(stream.total_out-[decompressedData length])];
if(err == Z_STREAM_END)
break;
CHECK_ERR(err, @"inflate");
}
err = inflateEnd(&stream);
CHECK_ERR(err, @"inflateEnd");
free(decompressedBytes);
return decompressedData;
}
一旦运行,我就会得到 Z_BUF_ERROR,我已经阅读了 here,我知道它指的是 ASIHTTPReqest,但我认为可能正在使用 xcode 提供的相同 zlib 类进行解压缩,他们说这是大小错误由于空间问题,Buffer 无法处理文件的解压。
我不完全确定这是否正确,他们提供了两种解决方案来修复,第一种是拆分数据包……这不是 imo 的选项,另一件事是增加缓冲区大小。 .我在想A,我怎么能这样呢? B、有没有更好的第三种选择?
任何帮助将不胜感激。
【问题讨论】:
标签: objective-c ios zlib