索引/随机访问7zip .7z档案

时间:2010-12-16 06:17:30

标签: indexing compression large-files 7zip random-access

存在用于提供对gzip和bzip2档案的随机访问的工具:

我正在为7zip

寻找任何类似的解决方案

(目标是在不解压缩的情况下离线使用有时巨大的Wikipedia转储文件)

2 个答案:

答案 0 :(得分:5)

我认为最好总结一下GZIP,BZIP2和LZMA的内部结构,以明确说明:

  1. GZIP实际上是一种使用Deflate算法的格式。由于静态霍夫曼代码(deflate文档也提到动态霍夫曼,但实际上它们也是静态的)deflate应该被编码为块状(滑动窗口是这里的另一个术语)。 zran.c似乎找到了那些块边界,并尝试最多解码2个连续的块,这些块可能包含一些KiB未压缩数据,用于收集足够的数据进行解压缩(以填充整个32 KiB窗口)。因此,即使没有索引表,也很可能进行随机访问。

  2. BZIP2实际上是一种BWT类压缩算法。由于BWT的性质,毫无疑问它是块状的。每个块的块数限制为900 KiB。此外,块边界很好地定义为易于恢复过程(具有巨大的不同标记)。因此,您甚至可以一次使用多个线程来解压缩所有数据。换句话说,即使没有任何表格也可以随机访问(格式已经支持)。

  3. LZMA支持最多1个GiB字典,并且它不是按块编码的。它使用范围编码器来编码概率而不是霍夫曼编码器。即使考虑64 MiB窗口大小(非常常见的值),由于范围编码器性质,我们不能简单地在给定的随机点解码,直到填满整个窗口。此外,LZMA的状态机也很麻烦。因此,它的实施非常困难甚至是不可能的。

  4. 也许LZMA2或PPM方法可用于此类用法(7-zip支持它们以及7-zip格式)。当统计信息已满时,PPM会刷新它的模型,LZMA2会在某个时间间隔内有意刷新某个状态以启用多线程解压缩。他们的随机访问实现是可能的。

答案 1 :(得分:5)

我的lzopfs项目允许随机访问lzop,gzip,bzip2和xz文件。 XZ文件是LZMA编码的,所以希望可以替代7-zip用于您的目的。请注意,对于逼真的随机访问,您需要使用阻塞编码器(例如pixz)或xz-utils 5.1.x alpha的多线程模式创建xz存档。