Пакетно-ориентированная библиотека сжатия без потерь - PullRequest
19 голосов
/ 10 мая 2011

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

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

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

Ответы [ 5 ]

9 голосов
/ 13 мая 2011

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

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

bzip2:хорошо, что может позволить вам делать такие вещи.Смотри http://www.bzip.org/1.0.5/bzip2-manual-1.0.5.html#bzCompress

5 голосов
/ 04 октября 2011

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

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

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

2 голосов
/ 06 октября 2011

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

1 голос
/ 24 мая 2015

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

0 голосов
/ 03 октября 2011

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

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

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