бесплатные библиотеки сжатия данных без gpl
Я пишу проект, который хранит данные, поэтому мне нужно, чтобы сжать его. Я пробовал zlib, но это узкое место моего проекта. Так может есть быстрое решение. Мне не нужен большой коэффициент сжатия, но я ищу очень быстрое сжатие. Существуют ли другие библиотеки сжатия данных, кроме zlib, которые действительно бесплатны и могут использоваться в проприетарном программном обеспечении (проект, над которым я работаю, не основан на GPL). Мой проект находится на C++ , и мне нужно сжать массивы текста char*.
11 ответов
очень быстрый алгоритм сжатия ЛЗО. Тесты на сайте показывают, что декомпрессия сопоставима по скорости с memcpy()
.
бесплатная версия LZO лицензирована GPL, но есть также коммерческая версия библиотеки в LZO Professional. Также из документации:
специальные лицензии для коммерческих и других приложений, которые не готовы принять лицензию GNU General Public, доступны по связаться с автором.
поскольку вам нужно что-то быстрое, но не обязательно лучшее сжатие, вы можете рассмотреть библиотеку, которая делает RLE (выполнить-длина кодировки) сжатия. Одна реализация -librle, который находится под лицензией BSD, что довольно допустимо для проприетарного использования.
другой ответ уже упоминает LZO
, что является своего рода решением по умолчанию "мне нужно быстрее (de)сжатие".
еще один, который я нашел, это liblzf. Довольно близко к LZO
с точки зрения скорости и степени сжатия. LZO
имеет лицензию GPL, тогда как liblzf
имеет лицензию BSD (что, IMHO, является преимуществом).
Google выпустила "Snappy", которая является лицензированной библиотекой сжатия BSD, написанной на C++ (привязки в C включены).
http://code.google.com/p/snappy/
согласно README в источнике:
в наших тестах Snappy обычно быстрее, чем алгоритмы в том же класс (например, LZO, LZF, FastLZ, QuickLZ и т. д.) при достижении сопоставимые коэффициенты сжатия.
из-за проблем с лицензированием LZO мы решили оценить предложения в этом потоке, которые лицензированы BSD/MIT, очень похожи на LZO (для более легкой интеграции) и подходят для работы на оборудовании низкого уровня (подумайте о недорогих 32-битных MCUs, а не Pentium2).
мы протестировали LZ4, LZF, FastLZ и сравнили результаты с LZO. Мы сжали графические данные. Я не могу опубликовать точные результаты, но LZ4 был значительно быстрее, чем другие (выигрыши в 7 тестах, с до 40% маржа против второго лучшего), при сопоставлении размера (5-2-2 выигрыша для LZF-LZ4-LZO, маржа была небольшой).
Интегрированные Примитивы Производительности Intel имеет образцы, которые реализуют различные сжатия:
- командой bzip2-совместимой библиотеки Пример ipp_bzip2 демонстрирует, как использовать доменные функции сжатия данных Intel IPP для реализации bzip2 / libbzip2 (программа и библиотека для сжатия данных без потерь, сортировки блоков и новых улучшений оптимизации потоков для bzip
- gzip-сжатия-совместимой библиотеки В IPP_GZIP пример иллюстрирует способ реализации эффективного решения сжатия данных без потерь с помощью Intel IPP Data Compression domain API. Кроме того, в этом примере показаны способы распараллеливания приложений с помощью OpenMP и других методов для получения дополнительных преимуществ в многоядерной среде.
- С zlib-библиотека (новинка!) В этом примере кода показано, как создать библиотеку сжатия данных, совместимую с zlib, с помощью оптимизированных функций кодирования LZ77 и Huffman в Intel IPP.
- общие примеры сжатия данных Иллюстрирует использование функций, предоставляемых доменом сжатия данных Intel IPP. Включает в себя кодирование/декодирование Хаффмана, кодирование/декодирование RLE, MoveToFront (MTF), преобразования Берроуза-Уилера (BWT), преобразование общего интервала (GIT) и функции Lempel-Ziv-Storer-Szymanski (LZSS).
IPP не является бесплатным, но это очень быстро. Он поддерживает Windows и Linux.
Я использовал LZSS реализация С Харухико Окумура. Лицензирование не ясно с его сайта, но некоторые версии был выпущен с включенной строкой" использовать, распространять и изменять эту программу свободно", и код свободно используется коммерческими поставщиками.
другой вариант может быть lzfx lib, которые реализуют LZF. Он выпущен под лицензией BSD.