Вопрос

Скажем, у меня есть файл BZIP2 (более 5 ГБ), и я хочу декомпрессировать только блок #x, потому что есть там, где есть мои данные (блок разные каждый раз). Как бы я это сделал?

Я подумал о том, чтобы сделать индекс того, где находятся все блоки, а затем вырезал блок, который мне нужен из файла, и применить к нему Bzip2recover.

Я также думал о сжатии, скажем, 1 МБ за раз, а затем добавление этого к файлу (и записи местоположения), и просто захватить файл, когда он мне нужен, но я бы предпочел сохранить исходный файл BZIP2 нетронутым.

Мой предпочтительный язык - рубин, но у любого языкового решения - это хорошо (до тех пор, пока я понимаю принцип).

Это было полезно?

Решение

Eсть 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