Подтвердить что ты не робот

Пакетная библиотека сжатия без потерь

Кто-нибудь знает о бесплатной (не GPL), достойно исполняющей библиотеке сжатия, которая поддерживает сжатие с пакетной ориентацией в C/С++?

С пакетной ориентацией я имею в виду вид функции QuickLZ (GPL), где несколько пакетов потока могут быть сжаты и распаковывается индивидуально, в то время как история поддерживается через пакеты для достижения разумного сжатия.

Я бы предпочел коэффициент сжатия по сравнению с использованием ЦП, пока использование ЦП не смешно, но мне было трудно найти эту функцию вообще, поэтому все это интересно.

4b9b3361

Ответ 1

Функция zlib main deflate() принимает параметр flush, который допускает различные режимы промывки. Если вы передадите Z_SYNC_FLUSH в конце каждого пакета, это должно произвести желаемый эффект.

Подробности объясняются в руководстве zLib.

bzip2 также имеет функцию смывания, что может позволить вам делать подобные вещи. См. http://www.bzip.org/1.0.5/bzip2-manual-1.0.5.html#bzCompress

Ответ 2

Google Snappy может быть хорошим вариантом, если вам нужна скорость больше, чем сжатие, и просто хотите сохранить умеренное пространство.

В качестве альтернативы Илья Муравьев недавно опубликовал небольшой фрагмент кода сжатия BALZ в общественном достоянии. Это довольно прилично для многих видов данных.

Обе из них поддерживают потоки сброса и независимые переменные состояния для выполнения нескольких параллельных потоков через пакеты.

Ответ 3

Новый SPDY использует zlib для сжатия отдельных сообщений и поддерживает состояние zlib для жизни соединения для достижения лучшего сжатия, Я не думаю, что есть отдельная библиотека, которая обрабатывает это поведение в точности, но существует несколько версий SPDY с открытым исходным кодом, которые могут показать вам, как это делается.

Ответ 4

Алгоритм Public Crush от Ilia Muraviev имеет аналогичную производительность и степень сжатия, как у QuickLZ, Crush является немного более мощным. Алгоритмы также концептуально похожи, Crush содержит немного больше трюков.
Алгоритм BALZ, о котором уже упоминалось ранее, также принадлежит Илье Муравьеву.
См. http://compressme.net/

Ответ 5

Возможно, вы можете использовать lzma compression SDK, который он написал и разместил в общественном достоянии Игоря Павлова.

И поскольку он может сжимать потоковые файлы и иметь память для сжатия памяти, я считаю возможным сжимать поток пакетов (может быть, с некоторыми изменениями), но не уверен.