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