我正在尝试使用来自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,我在这里读过,我知道它指的是 ASIHTTPReqest,但我认为可能正在使用 xcode 提供的相同 zlib 类进行解压缩,他们说这是缓冲区大小的错误不是能够处理由于空间而导致的文件解压缩。
我不完全确定这是否正确,他们提供了两种解决方案来修复,第一种是拆分数据包……这不是 imo 的选择,另一件事是增加缓冲区大小……我是想知道A,我怎么能这样做?B、有没有更好的第三种选择?
任何帮助将不胜感激。