Чтение zip-файлов без полной загрузки - PullRequest
3 голосов
/ 15 июля 2010

Можно ли прочитать содержимое файла .ZIP, не загрузив его полностью?

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

Спасибо;

Ответы [ 4 ]

5 голосов
/ 15 июля 2010

Сложная часть заключается в определении начала центрального каталога, который происходит в конце файла. Поскольку каждая запись имеет одинаковый фиксированный размер, вы можете выполнить бинарный поиск, начиная с конца файла. Бинарный поиск пытается угадать, сколько записей в центральном каталоге. Начните с некоторого разумного значения N и извлеките эту часть файла в конце - (N * sizeof (DirectoryEntry)). Если эта позиция файла не начинается с сигнатуры записи центрального каталога, то N слишком велико - половина и повтор, в противном случае N слишком мало, удваивается и повторяется. Как и бинарный поиск, процесс поддерживает текущую верхнюю и нижнюю границы. Когда эти два становятся равными, вы нашли значение для N, количество записей.

Количество посещений веб-сервера не более 16, поскольку записей может быть не более 64 КБ.

Является ли это более эффективным, чем загрузка всего файла, зависит от размера файла. Вы можете запросить размер ресурса перед загрузкой, и, если он меньше заданного порогового значения, загрузить весь ресурс. Для больших ресурсов запрос нескольких смещений будет выполняться быстрее и, в целом, будет менее затратным для веб-сервера, если установлен высокий порог.

HTTP / 1.1 позволяет загружать диапазоны ресурса. Для HTTP / 1.0 у вас нет выбора, кроме как загрузить весь файл.

2 голосов
/ 15 июля 2010

формат предполагает, что ключевая информация о том, что находится в файле, находится в конце его.Затем записи указываются как смещение от этой конкретной записи, поэтому вам нужно иметь доступ ко всему, что я считаю.

Форматы GZip можно читать как поток, который я считаю.

1 голос
/ 15 июля 2010

Я не знаю, помогает ли это, потому что я не программист. Но в Outlook вы можете предварительно просмотреть zip-файлы и увидеть фактическое содержимое, а не только каталог файлов (если они являются документами для предварительного просмотра, такими как pdf).

0 голосов
/ 06 августа 2010

В ArchView реализовано решение «ArchView может открывать архивный файл онлайн, не загружая весь архив».https://addons.mozilla.org/en-US/firefox/addon/5028/

Внутри archview-0.7.1.xpi в файле "archview.js" вы можете посмотреть их подход к JavaScript.

...