首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >索引/随机访问7zip .7z档案

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

Stack Overflow用户
提问于 2010-12-16 06:17:29
回答 2查看 3.3K关注 0票数 4

现有工具可以提供对gzip和bzip2档案的随机访问:

我正在为7zip寻找类似的解决方案

(目标是在不保留解压缩副本的情况下脱机使用有时庞大的维基百科转储文件)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-24 23:44:18

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

  1. GZIP实际上是一种使用Deflate算法的格式。由于静态的huffman代码(平减文档也提到了动态huffman,但实际上它们也是静态的),应该将平减编码为块(滑动窗口是这里的另一个术语)。C似乎找到了这些块的边界,并尝试最多解码最多两个连续的块,其中可能包含一些KiB未压缩的数据,用于收集足够的数据来解压缩(填充整个32 KiB窗口)。因此,即使没有索引表,随机访问也是可能的。
  2. BZIP2实际上是一种BWT类压缩算法。由于BWT的性质,难怪它是分块的。对于每个块,它的块限制为900 KiB。此外,块边界被很好地定义,以便于恢复过程(有巨大的不同标记)。因此,您甚至可以同时使用多个线程来解压缩所有数据。换句话说,即使没有任何表(格式已经支持它),随机访问也是非常可能的。
  3. LZMA支持最多一个GiB字典,而且它不是按块编码的.它使用范围编码器来编码概率,而不是赫夫曼编码器。即使考虑到64 MiB窗口大小(非常常见的值),由于范围编码器的性质,我们不能简单地解码在给定的随机点,直到填满整个窗口。此外,LZMA的状态机也可能是麻烦的。所以,它的实现是相当困难的,甚至不可能的。

也许LZMA2或PPM方法可以用于这类使用(7-zip支持,以及7-zip格式)。当它的统计数据满时,PPM刷新它的模型,并且LZMA2有意在某个时间间隔刷新一些状态,以启用多线程解压缩。它们的随机访问实现是可能的。

票数 7
EN

Stack Overflow用户

发布于 2014-05-04 15:46:03

我的伊佐普夫项目允许随机访问lzop、gzip、bzip2和xz文件。XZ文件是LZMA编码的,因此希望能代替7-zip实现您的目的。请注意,对于实际的随机访问,您需要使用阻塞的编码器创建xz存档,例如皮兹或xz 5.1.xalpha的多线程模式。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4457997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档