Простой ZIP-файл выглядит так:
LocalHeader1
CompressedData1
LocalHeader2
CompressedData2
[...]
LocalHeaderN
CompressedDataN
CentralHeader1
CentralHeader2
[...]
CentralHeaderN
EndHeader
EndHeader содержит (среди прочего) смещение к первому CentralHeader, затем каждый CentralHeader содержит смещение к соответствующему LocalHeader.
Некоторые библиотеки могут с самого начала считывать zip-файл для последовательной обработки LocalHeaders, восстанавливая, таким образом, то, что можно восстановить из поврежденного zip-файла.