仅解压缩特定的bzip2块

时间:2009-09-30 10:39:24

标签: archive compression bzip2 bzip

假设我有一个bzip2文件(超过5GB),我想只解压缩块#x,因为我的数据就在哪里(块每次都不同)。我该怎么做?

我考虑过制作所有块所在位置的索引,然后从文件中剪切我需要的块并将bzip2recover应用到它。

我还考虑过一次压缩1MB,然后将其附加到文件(并记录位置),并在需要时简单地抓取文件,但我宁愿保持原始的bzip2文件不变。 / p>

我的首选语言是Ruby,但任何语言的解决方案都很好(只要我了解原理)。

2 个答案:

答案 0 :(得分:6)

有一个http://bitbucket.org/james_taylor/seek-bzip2

抓住源码,编译它。

使用

运行
./seek-bzip2  32 < bzip_compressed.bz2 

进行测试。

唯一的参数是奇迹块标题的位移位。 你可以通过在二进制文件中找到“31 41 59 26 53 59”十六进制字符串来获得它。这是不正确的。块启动可能未与字节边界对齐,因此您应搜索“31 41 59 26 53 59”十六进制字符串的每个可能位移,如在bzip2recover中完成 - http://www.bzip.org/1.0.3/html/recovering.html

32是“BZh1”标题的位大小,其中1可以是从“1”到“9”的任何数字(在经典的bzip2中) - 它是一个(未压缩的)块大小,数百kb(不精确)。 / p>

答案 1 :(得分:2)

确实,bzip-table几乎和解压缩一样慢,但当然你只需要做一次就可以以某种方式存储输出以用作索引。这非常适合我的需要,但可能不是每个人都需要的。

我确实需要一些帮助才能让它在Windows上编译。