我正在尝试在iOS 5.0上为gzip压缩字节缓冲区充气。 我正在使用CocoaDev处的NSData类别。 但是,每次我在NSData对象上调用gzipInflate时,它都会返回“nil”。
我已尝试链接到libz,为模拟器和设备构建,并尝试了一个干净的构建,但没有一个成功。
NSData对象包含有效的gzip压缩数据。
任何帮助都将不胜感激。
EDIT1:这是我正在使用的代码。
uint8_t appendArray[1];
for (int i=0; i != 1024; i++) {
appendArray[0] = [self readByte]; // neccessary, because [self readByte] returns a uint8_t.
[tempdata appendBytes:appendArray length:1];
}
NSData *almostdata = [tempdata gzipInflate]; // Returns nil
assert(almostdata != nil); // Fails
Tempdata是一个NSMutableData对象,具有1024字节的容量。 readByte是一种从网络流中读取一个字节的方法。 gzipInflate方法来自here。 流中的数据长度为1024字节,同时进行压缩。
EDIT2:它是一个Z_BUF_ERROR,但输出缓冲区对于字节来说已经足够大了。
EDIT3:这个问题只是因为我误读了网络协议。在尝试ungzip之前,我只需要合并流中的所有数据。
答案 0 :(得分:1)
我看不到你的所有代码 - 所以这在黑暗中有点刺痛 - 但看起来你正在阅读uselessArray
- 但是你要追加来自{{1}的数据} ...
应该这样:
appendedArray
是这样的:
uselessArray[0] = [self readByte]; // neccessary, because [self readByte] returns a uint8_t.
[tempdata appendBytes:appendArray length:1];
答案 1 :(得分:0)