Wie hängen zlib, gzip und zip zusammen? Was haben sie gemeinsam und wie unterscheiden sie sich?

948

Der in zlib verwendete Komprimierungsalgorithmus ist im Wesentlichen der gleiche wie der in gzip und zip . Was sind gzip und zip ? Wie unterscheiden sie sich und wie sind sie gleich?

Abhishek Jain
quelle

Antworten:

2476

Kurzform:

.zipist ein Archivformat , das normalerweise die Deflate-Komprimierungsmethode verwendet . Das .gzgzip-Format gilt für einzelne Dateien, auch mit der Deflate-Komprimierungsmethode. Oft gzip wird in Kombination mit verwendet Teer ein komprimiertes Archiv - Format zu machen , .tar.gz. Die zlib-Bibliothek bietet Deflate-Komprimierungs- und Dekomprimierungscode zur Verwendung durch zip, gzip, png (das den zlib-Wrapper für Deflate-Daten verwendet) und viele andere Anwendungen.

Lange Form:

Das ZIP-Format wurde von Phil Katz als offenes Format mit einer offenen Spezifikation entwickelt, wobei seine Implementierung, PKZIP, Shareware war. Es ist ein Archivformat, in dem Dateien und ihre Verzeichnisstruktur gespeichert werden, wobei jede Datei einzeln komprimiert wird. Der Dateityp ist .zip. Die Dateien sowie die Verzeichnisstruktur können optional verschlüsselt werden.

Das ZIP-Format unterstützt verschiedene Komprimierungsmethoden:

0 - The file is stored (no compression)
1 - The file is Shrunk
2 - The file is Reduced with compression factor 1
3 - The file is Reduced with compression factor 2
4 - The file is Reduced with compression factor 3
5 - The file is Reduced with compression factor 4
6 - The file is Imploded
7 - Reserved for Tokenizing compression algorithm
8 - The file is Deflated
9 - Enhanced Deflating using Deflate64(tm)
10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
11 - Reserved by PKWARE
12 - File is compressed using BZIP2 algorithm
13 - Reserved by PKWARE
14 - LZMA (EFS)
15 - Reserved by PKWARE
16 - Reserved by PKWARE
17 - Reserved by PKWARE
18 - File is compressed using IBM TERSE (new)
19 - IBM LZ77 z Architecture (PFS)
97 - WavPack compressed data
98 - PPMd version I, Rev 1

Die Methoden 1 bis 7 sind historisch und werden nicht verwendet. Die Methoden 9 bis 98 sind relativ neue Ergänzungen und werden in unterschiedlichen, geringen Mengen verwendet. Die einzige Methode, die im ZIP-Format wirklich weit verbreitet ist, ist Methode 8, Deflate , und in geringerem Maße Methode 0, bei der es sich überhaupt nicht um Komprimierung handelt. Praktisch jede .zipDatei, auf die Sie in freier Wildbahn stoßen, verwendet ausschließlich die Methoden 8 und 0, wahrscheinlich nur die Methode 8. (Methode 8 bietet auch die Möglichkeit, die Daten ohne Komprimierung und mit relativ geringer Erweiterung effektiv zu speichern, und Methode 0 kann nicht gestreamt werden während Methode 8 sein kann.)

Der ISO / IEC 21320-1: 2015-Standard für Dateicontainer ist ein eingeschränktes Zip-Format, wie es in Java-Archivdateien (.jar), Office Open XML-Dateien (Microsoft Office .docx, .xlsx, .pptx) und Office-Dokumenten verwendet wird Formatieren Sie Dateien (.odt, .ods, .odp) und EPUB-Dateien (.epub). Dieser Standard beschränkt die Komprimierungsmethoden auf 0 und 8 sowie andere Einschränkungen wie keine Verschlüsselung oder Signaturen.

Um 1990 schrieb die Info-ZIP-Gruppe tragbare, kostenlose Open-Source-Implementierungen zipund unzipDienstprogramme, die die Komprimierung mit dem Deflate-Format und die Dekomprimierung dieses und der früheren Formate unterstützten. Dies hat die Verwendung des .zipFormats erheblich erweitert .

In den frühen 90er Jahren wurde das gzip-Format als Ersatz für das Unix- compressDienstprogramm entwickelt , das aus dem Deflate-Code in den Info-ZIP-Dienstprogrammen abgeleitet wurde. Unix compresswurde entwickelt, um eine einzelne Datei oder einen Stream zu komprimieren und ein .Zan den Dateinamen anzuhängen. compressverwendet den LZW-Komprimierungsalgorithmus , der zu diesem Zeitpunkt patentiert war und dessen freie Verwendung von den Patentinhabern bestritten wurde. Obwohl einige spezifische Implementierungen von Deflate von Phil Katz patentiert wurden, war das Format nicht patentiert, und so war es möglich, eine Deflate-Implementierung zu schreiben, die keine Patente verletzte. Diese Implementierung wurde in den letzten 20 Jahren nicht so in Frage gestellt. Das Unix- gzipDienstprogramm war als Ersatz für gedachtcompressund ist in der Tat in der Lage, compresskomprimierte Daten zu dekomprimieren (vorausgesetzt, Sie konnten diesen Satz analysieren). gzipHängt ein .gzan den Dateinamen an. gzipverwendet das komprimierte Deflate-Datenformat, das deutlich besser komprimiert als Unix compress, sehr schnell dekomprimiert und einen CRC-32 als Integritätsprüfung für die Daten hinzufügt. Das Header-Format ermöglicht auch die Speicherung von mehr Informationen als das compresszulässige Format, wie z. B. der ursprüngliche Dateiname und die Änderungszeit der Datei.

Obwohl compressnur eine einzelne Datei komprimiert wird, war es üblich, das tarDienstprogramm zu verwenden, um ein Archiv von Dateien, ihren Attributen und ihrer Verzeichnisstruktur in einer einzigen .tarDatei zu erstellen und diese dann zu komprimieren compress, um eine .tar.ZDatei zu erstellen. Tatsächlich tarhatte und hat das Dienstprogramm die Möglichkeit, die Komprimierung gleichzeitig durchzuführen, anstatt die Ausgabe von tarto weiterleiten zu müssen compress. Dies alles wurde auf das gzip-Format übertragen und tarbietet die Möglichkeit, direkt auf das .tar.gzFormat zu komprimieren . Das tar.gzFormat wird besser komprimiert als der .zipAnsatz, da bei der Komprimierung von a .tardie Redundanz zwischen Dateien, insbesondere vielen kleinen Dateien, ausgenutzt werden kann. .tar.gzist das unter Unix am häufigsten verwendete Archivformat, da es sehr portabel ist. Es werden jedoch auch effektivere Komprimierungsmethoden verwendet, sodass Sie häufig sehen .tar.bz2und .tar.xzarchivieren.

Im Gegensatz zu .tar, .ziphat am Ende ein zentrales Verzeichnis, das eine Liste der Inhalte zur Verfügung stellt. Dies und die separate Komprimierung ermöglichen den wahlfreien Zugriff auf die einzelnen Einträge in einer .zipDatei. Eine .tarDatei müsste dekomprimiert und von Anfang bis Ende gescannt werden, um ein Verzeichnis zu erstellen. So wird eine .tarDatei aufgelistet.

Kurz nach der Einführung von gzip, etwa Mitte der neunziger Jahre, stellte derselbe Patentstreit die freie Verwendung des .gifBildformats in Frage , das in Bulletin Boards und im World Wide Web (zu dieser Zeit neu) sehr verbreitet war. Daher hat eine kleine Gruppe das verlustfrei komprimierte PNG-Bildformat mit Dateityp erstellt .png, um es zu ersetzen .gif. Dieses Format verwendet auch das Deflate-Format für die Komprimierung, das angewendet wird, nachdem Filter für die Bilddaten einen größeren Teil der Redundanz verfügbar gemacht haben. Um die weit verbreitete Verwendung des PNG-Formats zu fördern, wurden zwei kostenlose Codebibliotheken erstellt. libpng und zlib. libpng handhabte alle Funktionen des PNG-Formats, und zlib stellte den Komprimierungs- und Dekomprimierungscode zur Verwendung durch libpng sowie für andere Anwendungen bereit. zlib wurde aus dem gzipCode angepasst .

Alle genannten Patente sind inzwischen abgelaufen.

Die zlib-Bibliothek unterstützt die Deflate-Komprimierung und -Dekomprimierung sowie drei Arten des Umlaufens der Deflate-Streams. Dies sind: überhaupt kein Wrapping ("rohes" Deflate), Zlib-Wrapping , das in den Datenblöcken im PNG-Format verwendet wird, und GZIP-Wrapping, um dem Programmierer GZIP-Routinen bereitzustellen. Der Hauptunterschied zwischen zlib- und gzip-Wrapping besteht darin, dass das zlib-Wrapping kompakter ist, sechs Bytes gegenüber mindestens 18 Bytes für gzip, und die Integritätsprüfung Adler-32 schneller ausgeführt wird als das von gzip verwendete CRC-32. Raw Deflate wird von Programmen verwendet, die das .zipFormat lesen und schreiben. Dies ist ein weiteres Format, das komprimierte Daten deflatiert.

zlib wird jetzt häufig für die Datenübertragung und -speicherung verwendet. Beispielsweise komprimieren und dekomprimieren die meisten HTTP-Transaktionen von Servern und Browsern die Daten mithilfe von zlib. Insbesondere Content-Encoding: deflatebedeutet HTTP-Header, dass die im zlib-Datenformat eingeschlossene Deflate-Komprimierungsmethode verwendet wird .

Unterschiedliche Implementierungen von Deflate können zu unterschiedlichen komprimierten Ausgaben für dieselben Eingabedaten führen, was durch das Vorhandensein auswählbarer Komprimierungsstufen belegt wird, die es ermöglichen, die Komprimierungseffektivität für die CPU-Zeit abzuwägen. zlib und PKZIP sind nicht die einzigen Implementierungen der Deflate-Komprimierung und -Dekomprimierung. Sowohl das 7-Zip-Archivierungsdienstprogramm als auch die zopfli-Bibliothek von Google können viel mehr CPU-Zeit als zlib verwenden, um die letzten möglichen Bits bei Verwendung des Deflate-Formats herauszuholen und die komprimierten Größen im Vergleich zu den höchsten von zlib um einige Prozent zu reduzieren Komprimierungsstufe. Das pigz-Dienstprogramm, eine parallele Implementierung von gzip, beinhaltet die Option, zlib (Komprimierungsstufen 1-9) oder zopfli (Komprimierungsstufe 11) zu verwenden, und verringert die zeitliche Auswirkung der Verwendung von zopfli etwas, indem die Komprimierung großer Dateien auf mehrere Prozessoren und Kerne aufgeteilt wird.

Mark Adler
quelle
113
Dieser Beitrag enthält so viel Geschichte und Informationen, dass ich der Meinung bin, dass einige Zitate hinzugefügt werden müssen, falls Leute versuchen, diesen Beitrag als Informationsquelle zu verwenden. Wenn sich diese Informationen irgendwo in Zitaten wie Wikipedia widerspiegeln, wäre ein Link zu solchen ähnlich zitierten Arbeiten wünschenswert.
ThorSummoner
1348
Ich bin die Referenz, ein Teil von all dem gewesen zu sein. Dieser Beitrag könnte in Wikipedia als Originalquelle zitiert werden.
Mark Adler
524
Zu Ihrer Information: Mark Adler ist ein amerikanischer Software-Ingenieur und war stark an der Erforschung des Weltraums beteiligt. Er ist bekannt für seine Arbeit auf dem Gebiet der Datenkomprimierung als Autor der Adler-32-Prüfsummenfunktion und Co-Autor der zlib-Komprimierungsbibliothek und von gzip. Er hat zu Info-ZIP beigetragen und an der Entwicklung des Bildformats Portable Network Graphics (PNG) mitgewirkt. Adler war auch der Spirit Cruise Mission Manager für die Mars Exploration Rover Mission. (Wikipedia)
Isaac Hanson
99
gzip wurde erstellt, um die Unix-Komprimierung zu ersetzen. zip ist tar + gzip unter Unix aus mehreren Gründen nicht überlegen. (Wenn Sie .tar.gzDateien sehen, sind sie genau das.) Erstens komprimiert tar + gzip besser als zip, da bei der Komprimierung der nächsten Datei der Verlauf der vorherigen Datei verwendet werden kann (manchmal als "solides" Archiv bezeichnet). zip kann Dateien nur einzeln komprimieren. Zweitens behält tar alle Unix-Verzeichnisinformationen bei, während zip nicht dafür entwickelt wurde. (Spätere Erweiterungen des Zip-Formats mit Unix-spezifischen zusätzlichen Blöcken versuchen, dieses Problem zu beheben.)
Mark Adler
85
Sie scheinen Formate mit der Implementierung zu verwechseln. Die 7-Zip- Implementierung des Deflate-Formats kann zu einer um 2% bis 10% besseren Komprimierung führen als gzip mit demselben Deflate-Format (wobei viel mehr CPU-Zeit erforderlich ist). Das 7z LZMA2- Format bietet eine um 40% bessere Komprimierung.
Mark Adler
43

ZIP ist ein Dateiformat, das zum Speichern einer beliebigen Anzahl von Dateien und Ordnern zusammen mit verlustfreier Komprimierung verwendet wird. Es werden keine strengen Annahmen über die verwendeten Komprimierungsmethoden getroffen, es wird jedoch am häufigsten mit DEFLATE verwendet .

Gzip ist sowohl ein auf DEFLATE basierender Komprimierungsalgorithmus, der jedoch weniger mit potenziellen Patenten belastet ist, als auch ein Dateiformat zum Speichern einer einzelnen komprimierten Datei. Es unterstützt das Komprimieren einer beliebigen Anzahl von Dateien und Ordnern in Kombination mit tar . Die resultierende Datei hat eine Erweiterung von .tgzoder .tar.gzund wird üblicherweise als Tarball bezeichnet .

zlib ist eine Bibliothek von Funktionen, die DEFLATE in seiner häufigsten LZ77- Inkarnation einkapseln .

Niels Keurentjes
quelle
28

Der wichtigste Unterschied besteht darin, dass gzip nur eine einzelne Datei komprimieren kann, während zip mehrere Dateien nacheinander komprimiert und anschließend in einer einzigen Datei archiviert. Daher kommt gzip die meiste Zeit mit Teer zusammen (es gibt jedoch auch andere Möglichkeiten). Dies bringt einige (Nachteile) mit sich.

Wenn Sie ein großes Archiv haben und nur eine einzige Datei benötigen, müssen Sie die gesamte gzip-Datei dekomprimieren, um zu dieser Datei zu gelangen. Dies ist nicht erforderlich, wenn Sie eine Zip-Datei haben.

Wenn Sie dagegen 10 ähnliche oder sogar identische Dateien komprimieren, wird das Zip-Archiv viel größer, da jede Datei einzeln komprimiert wird, während in gzip in Kombination mit tar eine einzelne Datei komprimiert wird, was bei den Dateien viel effektiver ist ähnlich (gleich).

Tim Zimmermann
quelle
8
Sie übertreiben den Punkt. Wenn Benutzer komprimierte Archive mit wahlfreiem Zugriff wünschen, können sie ".gz.tar" -Dateien anstelle von ".tar.gz" -Dateien erstellen. Sie tun es nicht, weil die meisten Leute nicht so an einem wahlfreien Zugriff interessiert sind. Es gibt eine große Community rund um das Webarchivierungsformat .warc.gz, und sie benötigen wahlfreien Zugriff, sodass sie jede Webseite separat komprimieren. Sie verwenden dieses Format jedes Mal, wenn Sie eine Webseite im Internet Archive Wayback Machine aufrufen.
Greg Lindahl
2
".gz.tar" bietet keinen Direktzugriff, da das tar-Format nicht zufällig auf seine Einträge zugreifen kann. Sie müssen alle Einträge von Anfang an durchgehen, um den gewünschten Eintrag zu erhalten, noch schlimmer: Sie müssen alle Einträge bis zum Ende durchgehen, da dieselbe Datei möglicherweise mehrmals (in mehreren Versionen) an mehreren Stellen archiviert wird im selben Archiv - und es gibt keine Möglichkeit, es herauszufinden, außer das gesamte Archiv Eintrag für Eintrag zu lesen.
Min-Soo Pipefeet