Das ZIP-Dateiformat (von englischzipper ‚Reißverschluss‘) ist ein Format für verlustfrei komprimierte Dateien, das einerseits den Platzbedarf bei der Archivierung reduziert und andererseits als Containerdatei fungiert, in der mehrere zusammengehörige Dateien oder auch ganze Verzeichnisbäume zusammengefasst werden können.
Die Dateiendung für zip-archivierte Dateien ist .zip. Der MIME-Typ ist application/zip.[1]
Das ZIP-Format wurde ursprünglich 1989 mit den Programmen PKZIP (komprimieren) und PKUNZIP (dekomprimieren) vom US-Amerikaner Phil Katz entwickelt und hat in der Zwischenzeit einige Erweiterungen erfahren. Katz hatte ursprünglich ein anderes Dateiformat (ARC) benutzt. Dieses Format war von Software Enhancements Associates (SEA) entwickelt worden und wurde als Shareware vertrieben. Katz schrieb eine eigene, deutlich schnellere Version dieser Software und verbreitete sie als PKARC. Als ihn daraufhin SEA verklagte, zog er PKARC zurück und entwickelte stattdessen PKZIP, das einen effizienteren Algorithmus benutzte. Durch die schnelle Verbreitung von PKZIP wurden SEA und ARC bedeutungslos.
Seit 2015 ist ZIP auch als ISO/IEC 21320-1:2015 standardisiert.[2]
Das ZIP-Format ist zunächst ein Datencontainer, in den mehrere Dateien komprimiert oder unkomprimiert gespeichert und auch einzeln entkomprimiert (extrahiert) werden können. Darüber hinaus ermöglicht das Format auch das Mitspeichern des dazugehörigen Speicherort-Pfads. Auch eine Verschlüsselung der ansonsten lediglich komprimierten Dateien mit einem Passwort ist möglich.
Keine progressive Kompression
Das ZIP-Format unterstützt keine progressive Kompression (auch englischsolid genannt), die Dateien werden einzeln komprimiert. Das ermöglicht einerseits eine flexible Handhabung (Löschen/Hinzufügen von Dateien aus dem Archiv, ohne alles neu komprimieren zu müssen; Extraktion einzelner Dateien ohne vorangehende Dateien dekomprimieren zu müssen), hat aber den Nachteil, dass Redundanzen zwischen den Dateien bei der Komprimierung nicht berücksichtigt werden können.
Dieser Nachteil kann umgangen werden, indem die Dateien zunächst unkomprimiert archiviert werden und die so erzeugte Zip-Datei in eine weitere komprimiert gespeichert wird (meist nur bei sehr vielen gleichartigen Dateien sinnvoll).
Nicht-sequenzielles Format
Die Dateien sind als Dateieinträge (englischfile entries) in beliebiger Reihenfolge gespeichert. Die Dateieinträge beginnen alle mit einem lokalen Dateikopf (englischlocal header), der den Dateieintrag beschreibt und den Datenabschnitt mit den effektiven Inhalten einleitet. Um die Handhabung dieser beliebig angeordneten Einträge zu gewährleisten, befindet sich am Ende der Zip-Datei jeweils ein zentrales Verzeichnis (englischcentral directory), welches sämtliche Dateieinträge anhand der lokalen Dateiköpfe referenziert. Die Reihenfolge der Dateieinträge und der entsprechenden Referenzen im zentralen Verzeichnis können sich voneinander unterscheiden. Es handelt sich also um eine nicht-sequenzielle Struktur, die am besten mit dem Konzept des wahlfreien Zugriffs (englischrandom access) beschrieben werden kann.
Dieses nicht-sequenzielle Format bewirkt andererseits aber auch, dass, im Gegensatz zum seit 1977 üblichen und seit 1988 standardisierten Tar-Format, unvollständige oder im hinteren Teil defekte Archive gar nicht entpackt werden können.
Multivolume
Es ist weiterhin möglich, das Archiv auf mehrere Dateien zu verteilen (zum Beispiel um große Dateien in Stücke zu teilen, die jeweils auf eine CD oder DVD passen).
Packalgorithmen
Neben der bis zur PKZip-Version 2.x am besten packenden Methode Deflate unterstützt ZIP noch eine Reihe weiterer Kompressionsalgorithmen[3]:
Neben PKZIP existieren zahlreiche andere Programme, die dieses Dateiformat bearbeiten können. Dazu zählen freie Programme wie Info-ZIP, PeaZip, Xarchiver oder 7-Zip, dessen optimierter Deflate-Algorithmus obendrein geringfügig kleinere PKZIP-2.xx-kompatible Dateien erzeugen kann. Ferner existieren kommerzielle Programme, wie WinRAR oder WinZip.
Programm- und Klassenbibliotheken für den Zugriff auf Zip-Dateien stehen für zahlreiche Programmiersprachen zur Verfügung. So enthält beispielsweise die Java Platform, Standard Edition (Java SE) seit 1997 (Version 1.1) das Paket „java.util.zip“ mit entsprechenden Klassen für Komprimierung und Dekomprimierung. Weiter gibt es die Klassenbibliothek Zip64File, welche Zip-Dateien als sogenannte Direktzugriffsdateien (englischrandom access files) handhaben kann. Zip64File steht der Öffentlichkeit vollumfänglich, kostenfrei und inklusive Quellcode zur Verfügung.
Das im System macOS integrierte Programm BOMArchiveHelper erzeugt und dekomprimiert ebenfalls im Zip-Format. Auch der Datei-Explorer unter Windows ist in der Lage, zip-Dateien zu packen und zu entpacken, sodass hier in der Regel keine weitere Software installiert werden muss.[16] Aus lizenzrechtlichen Gründen durfte die Implementierung in Windows nicht in der Lage sein, programmierbar benutzt werden zu können.[17]
Name, Namensverwirrung
Nach Auskunft der Firma PKWare bezieht sich der Name zip (englisch für Reißverschluss) auf das Verpacken von vielen Einzeldateien in einen größeren Container und nicht auf die Komprimierungsfunktion des Programms.
Nicht jedes Kompressionsprogramm, dessen Name die Zeichenkette „ZIP“ enthält, arbeitet mit dem ZIP-Dateiformat. Die wichtigsten Beispiele sind gzip vom GNU-Projekt und bzip2, die jeweils in einem eigenständigen Format nur eine einzelne Datei komprimieren. Zum Archivieren mehrerer Dateien muss in diesem Fall vor der Komprimierung ein anderes Programm verwendet werden (im Zusammenhang mit gzip und bzip2 meist tar). Auch bei 7-Zip wird zwar das ZIP-Dateiformat voll unterstützt, aber das eigene Archivformat 7z ist nicht mit ZIP kompatibel.
WinZip führte mit Version 12.1 die Erweiterung zipx des ZIP-Formats ein, die die Verwendung neuerer Kompressionsmethoden als DEFLATE, insbesondere BZip, LZMA, PPMd, Jpeg and Wavpack, kennzeichnet.
Das Wort „zippen“ wird gelegentlich als Deonym für „komprimiert archivieren“ verwendet, jedoch muss dabei nicht zwangsläufig das Packen als Zip-Datei gemeint sein.
ZIP-Komprimierung in anderen Datei-Formaten
Bei folgenden Dateiformaten handelt es sich um Zip-Dateien, in denen sich allerdings bestimmte Dateien befinden müssen:
Java Archive (JAR) – ein auf Zip basierendes Format für Java-Programmdaten
Android Package (APK) – ähnlich wie JAR-Dateien jedoch für Android[18][19]
OpenDocument (ODF) – das unter anderem von Apache OpenOffice verwendete Dateiformat ist ein auf mehrere XML-Dateien aufbauendes Format, welches mithilfe von Zip zu einzelnen Dateien komprimiert wird
↑ISO/IEC 21320-1:2015. Information technology — Document Container File — Part 1: Core. In: iso.org. ISO, Oktober 2015, abgerufen am 11. April 2022 (englisch).
↑ZIP File Format Specification. Version 6.3.4. In: pkware.cachefly.net. PKWARE Inc, 1. Oktober 2014, archiviert vom Original am 24. Dezember 2014; abgerufen am 18. August 2017 (englisch).
↑Android package – Eintrag im Android-Wiki; u. a. mit „Die verwendete Programmiersprache ist dabei meist Java, […]“, im dortigen (zuletzt am 5. November 2017 geänderten) Abschnitt „APK-Datei erstellen“