【问题标题】:LZMA compression settings detailsLZMA 压缩设置详细信息
【发布时间】:2018-07-13 18:33:21
【问题描述】:

我真的需要知道每个 lzma 参数 (mf, fb, lp, ...) 的含义。我在互联网上找不到任何好的文档。我需要这个算法的细节。最详细的是: http://www.bugaco.com/7zip/MANUAL/switches/method.htm 我将不胜感激。

最好的祝愿, 沙迪。

【问题讨论】:

  • 你是想实现 lzma,还是仅仅使用现有的工具?
  • 我想对 lzma 源代码进行一些更改。另外,我希望能够设置参数来优化速度或压缩比。因此,我需要了解有关算法及其参数的详细信息。谢谢。
  • @Shadi:你检查过method.htm吗?

标签: lzma


【解决方案1】:

根据Wikipediano complete natural language specification of the compressed format seems to exist。但是指定了配置设置。

在使用LZMA SDK 的过程中,我发现了以下压缩设置CLzmaEncPropsCLzma2EncProps 结构类型:

LZMA 选项:

级别

  • 说明:压缩级别。
  • 范围:[0;9]。
  • 默认值:5。

dictSize

  • 说明:字典大小。
  • 范围:32-bit 版本为 [164-bit 版本为 [1
  • 默认值:1

lc

  • 描述:前一个字节的高位数,用作文字编码的上下文。
  • 范围 [0;8]。
  • 默认值:3
  • 有时 lc = 4 会为大文件带来收益。

lp

  • 说明:要包含在literal_pos_state 中的字典位置的低位位数。
  • 范围:[0;4]。
  • 默认值:0。
  • 当周期等于 2^value(其中 lp=value)时,它适用于周期性数据。例如,对于 32 位(4 字节)定期数据,您可以使用 lp=2。如果您更改 lp 开关,通常最好设置 lc=0。

pb

  • 说明:pb 是要包含在 pos_state 中的字典位置的低位数。
  • 范围:[0;4]。
  • 默认值:2。
  • 它适用于周期等于 2^value(其中 lp=value)的周期性数据。

算法

  • 说明:设置压缩模式。
  • 选项:0 = 快速,1 = 正常。
  • 默认值:1。

脸书

  • 说明:设置 Deflate/Deflate64 编码器的快速字节数。
  • 范围:[5;255]。
  • 默认值:128。
  • 通常,较大的数字会提供更好的压缩比和较慢的压缩过程。较大的快速字节参数可以显着提高包含长相同字节序列的文件的压缩率。

bt模式

  • 描述:为 LZMA 设置匹配查找器。
  • 选项:0 = hashChain 模式,1 = binTree 模式。
  • 默认值:1。
  • 默认方法是 bt4。来自 hc* 组的算法不能提供良好的压缩比,但它们通常在与快速模式结合使用时非常快。

numHashBytes

  • 描述:哈希字节数。详情请参阅mf={MF_ID} 部分here
  • 选项:2、3 或 4。
  • 默认值:4。

mc

  • 说明:设置匹配查找器的循环(通过)数。
  • 范围:[1;1
  • 默认值:32。
  • 如果您指定 mc = 0,LZMA 将使用默认值。通常,较大的数字会提供更好的压缩比和较慢的压缩过程。例如,mf=HC4 和 mc=10000 可以提供与 mf=BT4 几乎相同的压缩比。

writeEndMark

  • 说明:可选择写入或不写入结束标记。
  • 选项:0 - 不写入 EOPM,1 - 写入 EOPM。
  • 默认值:0。

线程数

  • 说明:线程数。
  • 选项:1 或 2
  • 默认值:2

LZMA2 选项:

LZMA2LZMA 的修改版本。与LZMA相比,它具有以下优势:

  1. 比无法压缩的数据更好的压缩率。 LZMA2 可以以未压缩的形式存储此类数据块。还有它 更快地解压缩此类数据。
  2. 更好的多线程支持。如果您压缩大文件,LZMA2 可以将该文件拆分为多个块并在多个线程中压缩这些块。

注意:LZMA2也支持所有LZMA参数,但lp + lc不能大于4

块大小

  • 描述:设置块大小。
  • 默认值:dictSize * 4。

numBlockThreads

  • 说明:设置每个块(块)的线程数。

numTotalThreads

  • 说明:LZMA2 可以使用的最大线程数。

注意: LZMA2 使用:x1x3 模式下每个块 1 个线程;在x5x7x9 模式下,每个块有 2 个线程。如果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

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 2015-06-27
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    相关资源
    最近更新 更多