在 7z 单文件存档中随机查找

osg*_*sgx 5 compression wikipedia 7zip random-access

是否可以对由 7zip 压缩的非常大的文件进行随机访问(大量搜索)?

原始文件非常大(999gb xml),我无法以解压格式存储它(我没有那么多可用空间)。因此,如果 7z 格式允许访问中间块而无需解压缩所选块之前的所有块,我可以构建块开头和相应原始文件偏移量的索引。

我的 7z 存档的标题是

37 7A BC AF 27 1C 00 02 28 99 F1 9D 4A 46 D7 EA  // 7z archive version 2;crc; n.hfr offset
00 00 00 00 44 00 00 00 00 00 00 00 F4 56 CF 92  // n.hdr offset; n.hdr size=44. crc
00 1E 1B 48 A6 5B 0A 5A 5D DF 57 D8 58 1E E1 5F
71 BB C0 2D BD BF 5A 7C A2 B1 C7 AA B8 D0 F5 26
FD 09 33 6C 05 1E DF 71 C6 C5 BD C0 04 3A B6 29
Run Code Online (Sandbox Code Playgroud)

更新:7z 存档器表示该文件具有单个数据块,并使用 LZMA 算法压缩。测试解压速度为600MB/s(解压数据),仅使用一个CPU核心。

Cya*_*yan 3

这在技术上是可行的,但如果您的问题是“当前可用的二进制 7zip 命令行工具是否允许这样做”,那么不幸的是答案是否定的。它允许的最好是将每个文件独立压缩到存档中,从而允许直接检索文件.但是由于您要压缩的是单个(巨大)文件,因此此技巧将不起作用。

恐怕唯一的方法是将文件分成小块,并将它们提供给 LZMA 编码器(包含在 LZMA SDK 中)。不幸的是,这需要一些编程技能。

注意:可以在这里找到技术上较差但微不足道的压缩算法。主程序正是您所寻找的:将源文件切成小块,并将它们一一送入压缩器(在本例中为 LZ4)。然后解码器执行相反的操作。它可以轻松跳过所有压缩块并直接转到您想要检索的块。 http://code.google.com/p/lz4/source/browse/trunk/lz4demo.c