假设我有一个bzip2文件(超过5GB),我想只解压缩块#x,因为我的数据就在哪里(块每次都不同)。我该怎么做?
我考虑过制作所有块所在位置的索引,然后从文件中剪切我需要的块并将bzip2recover应用到它。
我还考虑过一次压缩1MB,然后将其附加到文件(并记录位置),并在需要时简单地抓取文件,但我宁愿保持原始的bzip2文件不变。 / p>
我的首选语言是Ruby,但任何语言的解决方案都很好(只要我了解原理)。
答案 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上编译。