假设我有一个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/

10-13 22:46