【问题标题】:Inflate gzipped bytes on an iPhone在 iPhone 上膨胀 gzipped 字节
【发布时间】:2012-01-30 19:34:37
【问题描述】:

我正在尝试在 iOS 5.0 上对 gzipped 字节缓冲区进行膨胀。 我正在使用CocoaDev 中的 NSData 类别。 但是,每次我在 NSData 对象上调用 gzipInflate 时,它​​都会返回“nil”。

我已经尝试链接到 libz,为模拟器和设备构建,并尝试了一个干净的构建,但没有一个成功。

NSData 对象包含有效的压缩数据。

任何帮助将不胜感激。

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:这个问题只是因为我看错了网络协议。在尝试解压缩之前,我只需要合并流中的所有数据。

【问题讨论】:

  • 我已经添加了代码。

标签: objective-c ios ios5 gzip


【解决方案1】:

我看不到你所有的代码 - 所以这有点像在黑暗中刺伤 - 但看起来你正在阅读 uselessArray - 但你正在附加来自 appendedArray 的数据...

应该这样:

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

是这样的:

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

?

【讨论】:

  • 如果能解决这个问题就好了,但这只是复制粘贴到这里的问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2014-03-24
    • 2019-07-06
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多