LZMA压缩设置详细信息

时间:2010-06-16 21:05:30

标签: lzma

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

祝福, 沙迪。

1 个答案:

答案 0 :(得分:12)

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

在我使用LZMA SDK工作期间,我发现了以下压缩设置CLzmaEncPropsCLzma2EncProps结构类型:

LZMA选项:

水平

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

dictSize

  • 描述:字典大小。
  • 范围:[{1}}版本的[1 <1; 1 <1; <27]或32-bit版本的[1 <1; 1&lt; <30]。
  • 默认值:1&lt;&lt;&lt; 24。

LC

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

LP

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

PB

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

ALGO

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

FB

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

btMode

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

numHashBytes

  • 描述:哈希字节数。有关详细信息,请参阅64-bit部分here
  • 选项:2,3或4。
  • 默认值:4。

MC

  • 描述:设置匹配查找器的周期数(通过次数)。
  • 范围:[1; 1 <&lt; 30]。
  • 默认值:32。
  • 如果指定mc = 0,LZMA将使用默认值。通常,大数字会提供更好的压缩比和更慢的压缩过程。例如,mf = HC4和mc = 10000可以提供与mf = BT4几乎相同的压缩比。

writeEndMark

  • 描述:写或不写结束标记的选项。
  • 选项:0 - 不写EOPM,1 - 写EOPM。
  • 默认值:0。

numThreads

  • 描述:线程数。
  • 选项:1或2
  • 默认值:2

LZMA2选项:

mf={MF_ID}LZMA2的修改版本。与LZMA相比,它具有以下优势:

  1. 比无法压缩的数据压缩率更高。 LZMA 可以以未压缩的形式存储这些数据块。还有 更快地解压缩这些数据。
  2. 更好的多线程支持。如果压缩大文件,LZMA2可以将该文件拆分为块并在多个线程中压缩这些块。
  3. 注意: LZMA2也支持所有LZMA2参数,但LZMA不能大于lp + lc

    BLOCKSIZE

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

    numBlockThreads

    • 描述:设置每个块(块)的线程数。

    numTotalThreads

    • 描述:4可以使用的最大线程数。

    注意: LZMA2使用:LZMA2x1模式中每个块的1个主题;以及x3x5x7模式中每个块的2个线程。如果将x9设置为仅使用一个块所需的此类线程数,则不会将流分割为块。因此,您可以针对不同数量的线程获得不同的压缩比。

    我认为,为了获得有关此主题的更多信息,您必须以更深刻的方式研究LZMA2。互联网上关于它的例子非常少,文档也很不完整。

    更多信息:

    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