Раздуть сжатые байты на iPhone - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь наполнить сжатый байтовый буфер на iOS 5.0. Я использую категорию NSData, найденную в CocoaDev . Однако каждый раз, когда я вызываю gzipInflate для объекта NSData, он возвращает «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 происходит от здесь . Данные из потока имеют длину 1024 байта, а сжатые.

EDIT2: это Z_BUF_ERROR, и все же выходной буфер более чем достаточно велик для байтов.

EDIT3: эта проблема была вызвана только тем, что я неправильно прочитал сетевой протокол. Мне просто пришлось объединить ВСЕ данные из потока, прежде чем пытаться разархивировать.

Ответы [ 2 ]

1 голос
/ 31 января 2012

Я не вижу весь ваш код - так что это немного удар в темноте - но похоже, что вы читаете в 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];

0 голосов
/ 03 февраля 2012

РЕДАКТИРОВАТЬ: Эта проблема была вызвана только потому, что я неправильно прочитал сетевой протокол. Мне просто пришлось объединить ВСЕ данные из потока, прежде чем пытаться разархивировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...