lzma_sdk
Официальный набор инструментов и библиотек для работы с алгоритмом сжатия LZMA (Lempel–Ziv–Markov chain algorithm). LZMA является основным алгоритмом сжатия в формате 7z и обеспечивает высокую степень сжатия при сохранении разумной скорости работы. SDK предоставляет библиотеки, утилиты командной строки и документацию для интеграции LZMA в различные приложения и системы.
Особенности
- реализация алгоритма сжатия LZMA и его улучшенной версии LZMA2;
- высокая степень сжатия, превосходящая многие распространённые алгоритмы;
- поддержка многопоточного сжатия для увеличения производительности;
- возможность настройки параметров сжатия (уровень сжатия, размер словаря, количество потоков).
Основные компоненты
LZMA SDK состоит из нескольких ключевых компонентов, которые обеспечивают сжатие и распаковку данных, а также интеграцию с различными форматами архивов (подробнее с документацией можно ознакомиться здесь).
Алгоритм LZMA и LZMA2
Основным компонентом SDK является реализация алгоритмов LZMA и LZMA2. LZMA использует комбинацию словарного сжатия LZ77 и вероятностного кодирования, что обеспечивает высокую степень сжатия для различных типов данных. LZMA2 представляет собой улучшенную версию с поддержкой многопоточного сжатия и лучшей обработкой несжимаемых данных.
Ключевые особенности алгоритмов:
- LZMA: высокая степень сжатия, настраиваемый размер словаря (до 4 ГБ в 64-битных версиях);
- LZMA2: поддержка многопоточного сжатия, улучшенная обработка несжимаемых данных, возможность разделения данных на блоки;
- Адаптивное вероятностное кодирование для эффективного сжатия различных типов данных;
- Поддержка сжатия без потерь.
Библиотеки для интеграции
SDK предоставляет библиотеки на языках C, C++ и C#, которые можно использовать для интеграции LZMA в собственные приложения. Библиотеки включают функции для сжатия и распаковки данных в памяти, а также для работы с потоковым вводом-выводом.
Основные функции библиотек:
LzmaCompress()иLzmaUncompress()— базовые функции для сжатия и распаковки блоков данных;Lzma2_Compress()иLzma2_Uncompress()— функции для работы с LZMA2;LzmaEnc_Create()иLzmaDec_Create()— создание объектов для потокового сжатия/распаковки;- Поддержка пользовательских аллокаторов памяти;
- Функции для настройки параметров кодера и декодера.
Поддержка форматов архивов
Хотя LZMA SDK в первую очередь ориентирован на алгоритм сжатия, он также включает поддержку формата 7z и может использоваться для работы с другими форматами архивов через интеграцию с библиотеками 7-Zip.
Поддерживаемые форматы:
- 7z: основной формат, использующий LZMA/LZMA2;
- XZ: формат, основанный на LZMA2 и широко используемый в Unix-системах;
- Сжатые данные LZMA: сырые данные, сжатые алгоритмом LZMA без заголовков архива;
- Возможность интеграции с другими форматами через API.
Многопоточное сжатие
LZMA2 поддерживает многопоточное сжатие, что позволяет значительно ускорить обработку больших данных на многоядерных процессорах. SDK предоставляет API для управления количеством потоков и другими параметрами параллельной обработки.
Возможности многопоточности:
- Автоматическое определение количества ядер процессора;
- Настраиваемое количество потоков сжатия;
- Распределение данных между потоками для минимизации накладных расходов;
- Поддержка многопоточной распаковки.
Настройка параметров сжатия
SDK позволяет тонко настраивать параметры сжатия для достижения оптимального баланса между степенью сжатия, скоростью работы и использованием памяти. Пользователи могут регулировать размер словаря, количество проходов компрессора и другие параметры.
Основные параметры:
- Уровень сжатия: от 0 (без сжатия) до 9 (максимальное сжатие);
- Размер словаря: от 1 МБ до 4 ГБ (в 64-битных версиях);
- Количество быстрых байтов (fb): параметр, влияющий на скорость и степень сжатия;
- Количество проходов (pass): количество проходов алгоритма для улучшения сжатия;
- Размер блока в LZMA2: настройка размера блоков для многопоточного сжатия.