Согласно Википедии no complete natural language specification of the compressed format seems to exist
.Однако параметры конфигурации указаны.
Во время работы с LZMA SDK
я обнаружил следующие параметры сжатия CLzmaEncProps
и CLzma2EncProps
типы структуры:
Параметры LZMA:
уровень
- Описание: уровень сжатия.
- Диапазон: [0; 9].
- По умолчанию: 5.
dictSize
- Описание: Размер словаря.
- Диапазон: [1 << 12; 1 << 27] для <code>32-bit версии или [1 <<12; 1 << 30] для <code>64-bit версии.
- По умолчанию: 1 << 24. </li>
lc
- Описание: Количествостаршие биты предыдущего байта для использования в качестве контекста для буквального кодирования.
- Range [0; 8].
- По умолчанию: 3
- Иногда lc = 4 дает усиление длябольшие файлы.
lp
- Описание: Количество младших битов позиции словаря для включения в literal_pos_state.
- Диапазон: [0; 4].
- По умолчанию: 0.
- Предназначено для периодического изданияданные, когда период равен 2 ^ значение (где lp = значение).Например, для 32-битных (4 байта) периодических данных вы можете использовать lp = 2.Часто лучше установить lc = 0, если вы измените переключатель lp.
pb
- Описание: pb - это число младших битов позиции словаря, включаемых вpos_state.
- Диапазон: [0; 4].
- По умолчанию: 2.
- Предназначено для периодических данных, когда период равен 2 ^ значению (где lp = значение).
algo
- Описание: установка режима сжатия.
- Параметры: 0 = быстрый, 1 = обычный.
- По умолчанию: 1.
fb
- Описание: устанавливает число быстрых байтов для кодера Deflate / Deflate64.
- Диапазон: [5; 255].
- По умолчанию: 128.
- Обычно большое число дает немного лучшую степень сжатия и замедляет процесс сжатия.Большой параметр быстрых байтов может значительно увеличить степень сжатия для файлов, которые содержат длинные идентичные последовательности байтов.
btMode
- Описание: Устанавливает Match Finder для LZMA.
- Опции: 0 = режим hashChain, 1 = режим binTree.
- По умолчанию: 1.
- Метод по умолчанию - bt4.Алгоритмы из группы hc * не обеспечивают хорошую степень сжатия, но они часто работают довольно быстро в сочетании с быстрым режимом.
numHashBytes
- Описание: Количество хэшейбайт.Подробнее см.
mf={MF_ID}
section здесь . - Опции: 2, 3 или 4.
- По умолчанию: 4.
mc
- Описание: Устанавливает количество циклов (проходов) для поиска совпадений.
- Диапазон: [1; 1 << 30]. </li>
- По умолчанию: 32.
- Если вы укажете mc = 0, LZMA будет использовать значение по умолчанию.Обычно большое число дает немного лучшую степень сжатия и замедляет процесс сжатия.Например, mf = HC4 и mc = 10000 могут обеспечить почти ту же степень сжатия, что и mf = BT4.
writeEndMark
- Описание: опция для записи или не записиконечная метка.
- Опции: 0 - не записывать EOPM, 1 - записывать EOPM.
- По умолчанию: 0.
numThreads
- Описание: Количество потоков.
- Опции: 1 или 2
- По умолчанию: 2
LZMA2 Опции:
LZMA2
является модифицированной версией LZMA
.Это обеспечивает следующие преимущества по сравнению с LZMA
:
- Лучшая степень сжатия для данных, чем для сжатия.
LZMA2
может хранить такие блоки данных в несжатом виде.Также он быстрее распаковывает такие данные. - Лучшая поддержка многопоточности.Если вы сжимаете большой файл,
LZMA2
может разбить этот файл на куски и сжать эти куски в несколько потоков.
Примечание: LZMA2
также поддерживает все параметры LZMA
, но lp + lc
не может быть больше 4
.
blockSize
- Описание: установка размера куска.
- По умолчанию: dictSize * 4.
numBlockThreads
- Описание: Установить количество потоков на блок (блок).
numTotalThreads
- Описание: максимальное количество потоков, которое может использовать
LZMA2
.
Примечание: LZMA2
использует: 1 поток на каждый блок в режимах x1
и x3
; и 2 потока для каждого чанка в режимах x5
, x7
и x9
. Если LZMA2
настроен на использование только такого количества потоков, которое требуется для одного блока, он не разделяет поток на блоки. Таким образом, вы можете получить разную степень сжатия для разного количества потоков.
Я думаю, что для того, чтобы получить больше информации по этому предмету, вам нужно более углубленно изучить LZMA
. В интернете очень мало примеров, и документация довольно неполная.
Подробнее здесь:
http://sevenzip.sourceforge.jp/chm/cmdline/switches/method.htm
http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Markov_chain_algorithm
http://linux.die.net/man/1/lzma