假设我有一个bzip2文件(超过5GB),并且我只想解压缩块#x,因为那里是我的数据所在(块每次都不同)。我该怎么做?
我考虑过要对所有块的位置进行索引,然后从文件中剪切所需的块并将bzip2recover应用于该块。
我还考虑过一次压缩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” header 的位大小,其中1可以是从“1”到“9”的任何数字(在经典bzip2中)-它是(未压缩的)块大小,以数百kb为单位(不精确)。
关于archive - 仅解压缩特定的bzip2块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1497319/