在iPhone上充气gzip压缩字节

时间:2012-01-30 19:34:38

标签: objective-c ios ios5 gzip

我正在尝试在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之前,我只需要合并流中的所有数据。

2 个答案:

答案 0 :(得分:1)

我看不到你的所有代码 - 所以这在黑暗中有点刺痛 - 但看起来你正在阅读uselessArray - 但是你要追加来自{{1}的数据} ...

应该这样:

appendedArray

是这样的:

uselessArray[0] = [self readByte]; // neccessary, because [self readByte] returns a uint8_t.
[tempdata appendBytes:appendArray length:1];

答案 1 :(得分:0)

编辑:这个问题只是因为我误读了网络协议。在尝试ungzip之前,我只需要合并流中的所有数据。