2013-09-10 4 views
0

Я работаю над iOS-приложением, которое время от времени скачивает ~ 50 МБ данных. bzip2 дает мне лучшую степень сжатия (уменьшает размер до 8 МБ).Uncompressing bzip2 в приложении iOS

Проблема заключается в следующем: как распаковать данные в приложении?

Я провел некоторое исследование - только две вещи, которые я нашел, это Keka (но полный источник не является общедоступным) и C++-источник инструмента командной строки bzip2, который слишком длинный и слишком сложный для меня, чтобы сделать необходимые корректировки для моего приложения за время, которое мне дано.

Я ищу что-то вроде http://commons.apache.org/proper/commons-compress/, которое используется в Android-приложении.

Если вы знаете, как это сделать с помощью 7zip вместо bzip2, это будет делать - это было немного менее эффективно.

ответ

1

bzip2 исходного код строит к libbzip2, что вы можете связать в своем коде до тех пор, пока у вас есть достаточно хороший компилятор (и я считаю, что этим дело для прошивки - хотя я не пробовал ...)

код нужно писать будет выглядеть примерно так:

int error; 
const int MAXSIZE = 4096; // Or some other decent size. 
char buffer[MAXSIZE]; 
FILE *f = fopen("somefile.bz2", "rb"); 
BZFILE* b = BZ2_bzReadOpen(&error, f, 0, 0, NULL, 0); 
do { 
    BZ2_bzRead(&error, b, buffer, MAXSIZE); 
} while(error != BZ_OK); 
BZ2_bzReadClose(&error, b); 

вы, возможно, потребуется добавить еще несколько проверок на «ошибки», но концепция должна работать [Я думаю, - я просто напечатал все, что код, основанный на документах, и мой опыт использования этого и подобных пакетов в прошлом].

0

Предлагаю вам статически ссылаться на libbz2. Найдите источники в Google.