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);
  • Отсутствие зависимостей и минимальный размер кода;
  • Поддержка только базовых функций сжатия и распаковки;
  • Легко интегрируется в любой проект.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "lzo/2.10@aurora",
    )    

Процесс локальной сборки описан в документации.

lzo

lzo is a portable lossless data compression library written in ANSI C
Лицензия
GPL-v2.0
Версия
Домашняя страница
Скачать
armv7
74.95 Kb
MD5: cbd683aaf9abe0bd01994e655fd42b9a
Updated: 08.09.2025, 16:46:54
armv8
81.03 Kb
MD5: fcf86ae3fd23ac93a60fe767acc1d1b7
Updated: 08.09.2025, 16:46:44
x86_64
83.08 Kb
MD5: a2579b9bfe3d0988139e09b2dd491def
Updated: 08.09.2025, 16:46:56
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.