10

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

我考虑过对所有块的位置进行索引,然后从文件中剪切我需要的块并将 bzip2recover 应用于它。

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

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

4

2 回答 2

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 的(未压缩)块大小(不精确)。

于 2010-09-13T14:17:46.623 回答
2

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

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

于 2010-12-15T16:48:12.147 回答