Распаковка bzip2 в приложении для iOS

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

Проблема в том, как распаковать данные в приложении?

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

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

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

0

Решение

bzip2 Исходный код строит в libbzip2 на который вы можете ссылаться в своем коде, если у вас достаточно хороший компилятор (и я считаю, что это так для iOS — хотя я не пробовал …)

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

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);

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

1

Другие решения

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

0