hip*_*ail 4 compression indexing 7zip random-access large-files
存在用于提供对gzip和bzip2存档的随机访问的工具:
我正在为7zip寻找任何类似的解决方案
(目标是在不解压缩的情况下脱机使用有时巨大的Wikipedia转储文件)
我认为最好总结一下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会在某个时间间隔内有意刷新某个状态以启用多线程解压缩.他们的随机访问实现是可能的.