Функциональность TrueZip с произвольным доступом
Я пытаюсь понять, как случайным образом пройти файл / файлы в.tar.gz, используя TrueZIP в среде Java 6 (используя Files
классы). Я нашел случаи, когда он использует Java 7 Path
Тем не менее, я не могу придумать пример того, как случайным образом читать архив на Java 6.
Кроме того, означает ли "случайное" чтение, что оно сначала распаковывает весь архив, или оно читает разделы в сжатом файле? Цель состоит в том, чтобы я хотел извлечь некоторую основную информацию из файла без необходимости распаковывать всю информацию, просто чтобы прочитать ее (например, имя пользователя).
3 ответа
В частности, я не знаю TrueZip, но, по крайней мере, с точки зрения Zip, RAR и Tar вы можете получить доступ к отдельным файлам, получить информацию о них и даже извлечь их, не затрагивая остальную часть пакета.
Кроме того, означает ли "случайное" чтение, что оно сначала распаковывает весь архив
Если TrueZip следует формату Zip/RAR/Tar, то он не распаковывает весь архив.
Цель состоит в том, чтобы я хотел извлечь некоторую основную информацию из файла без необходимости распаковывать всю информацию, просто чтобы прочитать ее (например, имя пользователя).
Как и раньше, это должно быть хорошо - я не знаю TrueZip API, в частности, но форматы контейнеров файлов позволяют вам проверять информацию о файле, не читая ни единого бита данных, и дополнительно извлекать / читать содержимое файла, не касаясь других файл в контейнере.
Метод, который gzip
использует для сжатия файла (особенно .tar.gz
файлы), как правило, подразумевает, что выходной файл не доступен в произвольном порядке - вам нужна таблица символов и другой контекст от всего файла до текущего блока, чтобы можно было даже распаковать этот блок, чтобы увидеть, что в нем находится. Это один из способов достижения (в некоторой степени) лучшего сжатия по сравнению с ZIP/pkzip, при котором каждый файл сжимается по отдельности перед добавлением их в архив контейнера, что дает возможность искать определенный файл и распаковывать только этот файл.
Итак, чтобы выбрать .tar.gz
кроме того, вам нужно будет распаковать все это, либо во временный файл, либо в память (если он не слишком большой), тогда вы можете перейти к конкретным записям в базовом файле. .tar
файл, хотя это должно быть сделано последовательно, пропуская от заголовка к заголовку, как tar
не включает в себя центральный индекс / каталог файлов.
Комментарий исходного кода zran описывает, как работают такие инструменты: http://svn.ghostscript.com/ghostscript/tags/zlib-1.2.3/examples/zran.c
В заключение можно сказать, что весь файл должен быть обработан для генерации необходимого индекса. Это намного быстрее, чем на самом деле распаковать все. Индекс позволяет разбить файл на блоки, которые можно распаковать без необходимости распаковывать блоки раньше. Это используется для эмуляции произвольного доступа.