lz4
Экстремально быстрая библиотека сжатия данных без потерь, которая обеспечивает высокую производительность как при сжатии, так и при распаковке данных. Алгоритм LZ4 оптимизирован для скорости и достигает скорости распаковки до 5 ГБ/с на современных процессорах, что делает его идеальным решением для приложений, требующих минимальной задержки и высокой пропускной способности.
Особенности
- экстремально высокая скорость сжатия и распаковки;
- настраиваемые уровни сжатия для баланса между скоростью и степенью сжатия;
- поддержка потокового (streaming) и кадрового (frame) форматов;
- низкие требования к памяти (рабочий буфер от 64 КБ).
Основные компоненты
LZ4 предоставляет несколько интерфейсов для различных сценариев использования: от простых функций для сжатия блоков до продвинутых API для потоковой обработки (подробнее с документацией можно ознакомиться здесь).
Базовые функции сжатия блоков
Библиотека предоставляет простые функции для сжатия и распаковки блоков данных фиксированного размера. Этот интерфейс идеально подходит для сжатия данных, которые помещаются в память целиком.
Основные функции блокового сжатия:
LZ4_compress_default()— сжатие блока данных с настройками по умолчанию;LZ4_decompress_safe()— безопасная распаковка (с проверкой границ буфера);LZ4_compressBound()— вычисление максимального размера сжатого блока;LZ4_compress_fast()— быстрое сжатие с настраиваемым ускорением (acceleration);LZ4_compress_HC()— высококомпрессионное сжатие (High Compression mode).
Потоковое сжатие
Для обработки данных, которые не помещаются в память целиком, LZ4 предоставляет потоковый интерфейс, позволяющий сжимать данные по частям. Это особенно полезно для сетевых протоколов, файловых потоков и обработки больших объемов данных.
Функции потокового сжатия:
LZ4_createStream()— создание контекста для потокового сжатия;LZ4_resetStream()— сброс контекста для повторного использования;LZ4_compress_fast_continue()— продолжение сжатия в потоковом режиме;LZ4_saveDict()— сохранение словаря для улучшения сжатия последующих данных;LZ4_createStreamDecode()иLZ4_decompress_safe_continue()— потоковая распаковка.
Кадровый формат
LZ4 Frame format — это стандартизированный формат для хранения сжатых данных, который включает заголовки, контрольные суммы и другие метаданные. Этот формат обеспечивает совместимость между различными реализациями LZ4 и инструментами.
Особенности кадрового формата:
- Поддержка контрольных сумм содержимого (content checksum) для проверки целостности;
- Заголовки с информацией о размере и параметрах сжатия;
- Совместимость с утилитой командной строки
lz4; - Стандартизированный формат для обмена данными.
Высококомпрессионный режим
LZ4_HC (High Compression) — это вариант алгоритма LZ4, который обеспечивает лучшую степень сжатия за счет более тщательного поиска совпадений. Этот режим медленнее стандартного, но всё равно значительно быстрее многих других алгоритмов сжатия.
Функции HC-режима:
LZ4_compress_HC()— сжатие в HC-режиме;LZ4_compress_HC_extStateHC()— использование внешнего буфера для состояния;- Настраиваемый уровень сжатия (от 1 до 12, где 12 — максимальное сжатие);
- Совместимость с форматами распаковки стандартного LZ4.
Низкоуровневые API и настройка производительности
Для опытных пользователей LZ4 предоставляет низкоуровневые функции, позволяющие точно контролировать процесс сжатия и оптимизировать производительность под конкретные рабочие нагрузки.
Низкоуровневые функции:
LZ4_compress_fast_extState()— сжатие с использованием внешнего буфера состояния;LZ4_compress_destSize()— сжатие до заданного размера буфера;- Настройка ускорения (acceleration) для баланса между скоростью и степенью сжатия;
- Прямой доступ к внутренним функциям хеширования и поиска.