Как просмотреть сжатый файл, распаковав только частично? - PullRequest
1 голос
/ 11 октября 2011

У меня есть сжатый файл, который я хочу просмотреть, используя что-то вроде утилиты "less" в unix. «Меньше» предоставляет возможность предварительной обработки, с помощью которой я могу распаковать файл. Но что, если я захочу частично распаковать файл (как часть предварительной обработки) и направить / направить вывод на меньшее? Это имеет преимущество распаковки только части файла.

Если есть какой-либо другой способ просмотреть сжатый файл путем частичной распаковки, пожалуйста, сообщите мне.

Спасибо, Рахул

1 Ответ

1 голос
/ 11 октября 2011

Для этого вам нужно придумать свой собственный формат сжатия;все существующие библиотеки (gzip, bzip2, lzma) являются потоковыми, но не разбиты на части (т.е. вы не можете искать в сжатом потоке).

Одним из решений является создание файла, подобного ZIP-архиву: поток записейсопровождаемый оглавлением (TOC).В вашем случае все записи (= чанки) будут иметь одинаковый размер перед сжатием.

Попробуйте размер чанка 4 КБ;это все равно должно дать довольно хорошее сжатие, разумное количество служебных данных и быстрое время декомпрессии на чанк.Запишите сжатые фрагменты в файл и запишите начальное смещение для каждого в оглавлении.

При поиске в потоке найдите необходимое смещение 4 КБ, прочитайте смещение из оглавления, прочитайте сжатый фрагмент,и распакуйте его.

[EDIT] Вам необходимо создать небольшой инструмент, который может начать распаковку в любом месте архива и который просто продолжает распаковываться, пока не будет достигнут EOF.Но вы, вероятно, хотите знать, какая часть файла less отображается в данный момент.Простого решения этого не существует.less предназначен для отображения потока.Он не может «искать» в этом потоке;вместо этого less создаст буфер где-то, в котором он может искать.Если вы хотите избежать этого (обычно потому, что файл слишком большой), вы должны написать свою собственную версию less.

В качестве альтернативы, взгляните на исходный код less.Может быть, вы можете заменить часть «буферного ввода» кода чем-то, что может говорить с вашим декодером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...