存在用于提供对gzip和bzip2档案的随机访问的工具:
我正在为7zip
寻找任何类似的解决方案(目标是在不解压缩的情况下离线使用有时巨大的Wikipedia转储文件)
答案 0 :(得分:5)
我认为最好总结一下GZIP,BZIP2和LZMA的内部结构,以明确说明:
GZIP实际上是一种使用Deflate算法的格式。由于静态霍夫曼代码(deflate文档也提到动态霍夫曼,但实际上它们也是静态的)deflate应该被编码为块状(滑动窗口是这里的另一个术语)。 zran.c似乎找到了那些块边界,并尝试最多解码2个连续的块,这些块可能包含一些KiB未压缩数据,用于收集足够的数据进行解压缩(以填充整个32 KiB窗口)。因此,即使没有索引表,也很可能进行随机访问。
BZIP2实际上是一种BWT类压缩算法。由于BWT的性质,毫无疑问它是块状的。每个块的块数限制为900 KiB。此外,块边界很好地定义为易于恢复过程(具有巨大的不同标记)。因此,您甚至可以一次使用多个线程来解压缩所有数据。换句话说,即使没有任何表格也可以随机访问(格式已经支持)。
LZMA支持最多1个GiB字典,并且它不是按块编码的。它使用范围编码器来编码概率而不是霍夫曼编码器。即使考虑64 MiB窗口大小(非常常见的值),由于范围编码器性质,我们不能简单地在给定的随机点解码,直到填满整个窗口。此外,LZMA的状态机也很麻烦。因此,它的实施非常困难甚至是不可能的。
也许LZMA2或PPM方法可用于此类用法(7-zip支持它们以及7-zip格式)。当统计信息已满时,PPM会刷新它的模型,LZMA2会在某个时间间隔内有意刷新某个状态以启用多线程解压缩。他们的随机访问实现是可能的。
答案 1 :(得分:5)