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

我考虑了制作所有块所在的索引,然后将所需的块从文件中切割,然后将bzip2 recover应用于其中。

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

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

有帮助吗?

解决方案

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

其他提示

的确,Bzip-table几乎像解压缩一样慢,但是您当然只需要一次,就可以以某种方式存储输出以用作索引。这对于我需要的是完美的,但可能不是每个人都需要的。

我确实需要一些帮助,让它在Windows上进行编译。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top