lzo
Библиотека для сжатия данных без потерь, ориентированная на экстремально высокую скорость сжатия и распаковки. Алгоритм LZO обеспечивает быстрое сжатие с умеренной степенью сжатия, что делает его идеальным для приложений, где важна минимальная задержка и высокая пропускная способность, например, в файловых системах, сетевых протоколах и системах реального времени.
Особенности
- очень высокая скорость сжатия и распаковки (распаковка особенно быстра);
- низкие требования к памяти как для сжатия, так и для распаковки;
- предсказуемое поведение с фиксированным или ограниченным размером выходного буфера;
- поддержка различных вариантов алгоритма (LZO1, LZO1A, LZO1B, LZO1C, LZO1F, LZO1X, LZO1Y, LZO1Z).
Основные компоненты
LZO предоставляет набор функций для сжатия и распаковки блоков данных, а также утилиты для работы с файлами (подробнее с документацией можно ознакомиться здесь).
Базовые функции сжатия и распаковки
Библиотека предоставляет простые функции для сжатия и распаковки блоков данных фиксированного размера. Каждая функция предназначена для конкретного варианта алгоритма, что позволяет выбирать оптимальный баланс между скоростью и степенью сжатия.
Основные функции:
lzo1x_1_compress()— сжатие с использованием популярного варианта LZO1X-1;lzo1x_decompress_safe()— безопасная распаковка с проверкой границ буфера;lzo1y_1_compress(),lzo1z_1_compress()— другие варианты алгоритма;lzo_adler32()— вычисление контрольной суммы Adler-32 для данных;lzo_version()— получение версии библиотеки.
Варианты алгоритма LZO
LZO включает несколько вариантов алгоритма, которые отличаются степенью сжатия, скоростью и использованием памяти. Это позволяет выбрать наиболее подходящий вариант для конкретной задачи.
Основные варианты:
- LZO1X: наиболее популярный вариант, обеспечивает хороший баланс скорости и сжатия;
- LZO1Y: аналогичен LZO1X, но с немного другим алгоритмом сжатия;
- LZO1Z: вариант с улучшенным сжатием, но более медленный;
- LZO1A, LZO1B, LZO1C, LZO1F: более старые варианты, поддерживаемые для совместимости.
Работа с памятью и буферизация
LZO использует фиксированные или предварительно выделенные буферы для сжатия и распаковки, что делает её поведение предсказуемым и подходящим для систем реального времени. Библиотека также предоставляет функции для оценки размера сжатых данных.
Функции работы с памятью:
lzo1x_1_compress()возвращает размер сжатых данных;lzo1x_decompress_safe()требует точного размера распаковываемых данных;LZO1X_1_MEM_COMPRESSиLZO1X_1_MEM_DECOMPRESS— константы, определяющие требования к памяти;- Возможность использования внешних аллокаторов памяти.
Потоковое сжатие и сегментирование данных
Хотя LZO в основном ориентирована на сжатие блоков, она также поддерживает сегментированное сжатие больших данных. Это позволяет обрабатывать данные по частям, что полезно для потоковой передачи или работы с файлами большого размера.
Возможности сегментированной обработки:
- Разделение данных на блоки с независимым сжатием;
- Сохранение состояния между блоками для улучшения сжатия (в некоторых вариантах);
- Простота интеграции с системами ввода-вывода.
Минимальная версия (MiniLZO)
MiniLZO — это сильно упрощённая версия библиотеки, состоящая из одного исходного файла и одного заголовочного файла. Она предназначена для встраиваемых систем и приложений, где важны минимальный размер и простота.
Особенности MiniLZO:
- Только один вариант алгоритма (обычно LZO1X);
- Отсутствие зависимостей и минимальный размер кода;
- Поддержка только базовых функций сжатия и распаковки;
- Легко интегрируется в любой проект.