仅解压缩特定的bzip2块

use*_*365 10 compression archive bzip bzip2

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

我想要制作一个所有块所在的索引,然后从文件中剪切我需要的块并将bzip2recover应用于它.

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

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

osg*_*sgx 6

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

抓取源代码,编译它.

运行

./seek-bzip2  32 < bzip_compressed.bz2 
Run Code Online (Sandbox Code Playgroud)

去测试.

唯一的参数是奇迹块头的位移.您可以通过在二进制文件中找到"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(不精确).