it-swarm.com.de

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

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?

904
Abhishek Jain

Kurzform:

.Zip ist ein Archivformat normalerweise unter Verwendung der Deflate-Komprimierungsmethode . Das .gz gzip-Format gilt für einzelne Dateien und verwendet auch die Komprimierungsmethode Deflate. Oft wird gzip in Kombination mit tar, um ein komprimiertes Archivformat zu erstellen , .tar.gz verwendet. Die zlib-Bibliothek bietet Deflate-Komprimierungs- und -Dekomprimierungscode zur Verwendung durch Zip, gzip, png (der den zlib-Wrapper für deflate-Daten verwendet) und viele andere Anwendungen.

Langform:

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 kleinen Mengen verwendet. Die einzige Methode, die im Zip-Format wirklich weit verbreitet ist, ist Methode 8, Deflate , und in geringerem Maße Methode 0, die überhaupt keine Komprimierung darstellt. Nahezu jede .Zip -Datei, auf die Sie in der Wildnis 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 relativ geringe Erweiterung effektiv zu speichern.) Methode 0 kann nicht gestreamt werden, wohingegen Methode 8 gestreamt werden kann.)

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

Um 1990 schrieb die Info-Zip-Gruppe portable, kostenlose Open-Source-Implementierungen der Hilfsprogramme Zip und unzip, die die Komprimierung mit dem Deflate-Format und die Dekomprimierung dieser und der frühere Formate. Dadurch wurde die Verwendung des Formats .Zip erheblich erweitert.

In den frühen 90er Jahren wurde das gzip-Format als Ersatz für das nix compress-Dienstprogramm entwickelt, das aus dem Deflate-Code in den Info-Zip-Dienstprogrammen abgeleitet wurde. Unix compress wurde entwickelt, um eine einzelne Datei oder einen Stream zu komprimieren und .Z an den Dateinamen anzuhängen. compress verwendet den LZW-Komprimierungsalgorithmus , der zu der Zeit patentiert war und dessen freie Verwendung von den Patentinhabern beanstandet wurde. Einige spezifische Deflate-Implementierungen wurden von Phil Katz patentiert, das Format jedoch nicht. Daher war es möglich, eine Deflate-Implementierung zu schreiben, die keine Patente verletzt. Diese Implementierung wurde in den letzten über 20 Jahren nicht so stark in Frage gestellt. Das Dienstprogramm Unix gzip war als Ersatz für compress gedacht und kann tatsächlich compress -komprimierte Daten dekomprimieren (vorausgesetzt, Sie konnten diesen Satz analysieren). gzip hängt einen .gz an den Dateinamen an. gzip verwendet das komprimierte Deflate-Datenformat, das wesentlich besser komprimiert als Unix compress, eine sehr schnelle Dekomprimierung aufweist und einen CRC-32 als Integritätsprüfung für die Daten hinzufügt. Das Header-Format ermöglicht auch das Speichern von mehr Informationen als das zulässige Format compress, z. B. den ursprünglichen Dateinamen und die Änderungszeit der Datei.

Obwohl compress nur eine einzelne Datei komprimiert, war es üblich, das Dienstprogramm tar zu verwenden, um ein Archiv von Dateien, ihren Attributen und ihrer Verzeichnisstruktur in eine einzelne Datei .tar und zu erstellen Komprimieren Sie es dann mit compress, um eine .tar.Z -Datei zu erstellen. Tatsächlich hatte und hat das Dienstprogramm tar die Option, die Komprimierung gleichzeitig durchzuführen, anstatt die Ausgabe von tar an compress weiterzuleiten. Dies alles wird auf das gzip-Format übertragen, und tar hat die Option, direkt in das .tar.gz -Format zu komprimieren. Das tar.gz -Format komprimiert besser als der .Zip -Ansatz, da bei der Komprimierung eines .tar die Redundanz zwischen Dateien genutzt werden kann, insbesondere bei vielen kleinen Dateien. .tar.gz ist das unter Unix am häufigsten verwendete Archivformat, da es sehr portabel ist. Es werden jedoch auch effektivere Komprimierungsmethoden verwendet, sodass häufig .tar.bz2 und .tar.xz angezeigt werden. Archiv.

Im Gegensatz zu .tar hat .Zip am Ende ein zentrales Verzeichnis, das eine Liste der Inhalte enthält. Dies und die separate Komprimierung ermöglichen den wahlfreien Zugriff auf die einzelnen Einträge in einer .Zip -Datei. Eine .tar -Datei müsste dekomprimiert und von Anfang bis Ende gescannt werden, um ein Verzeichnis zu erstellen. Auf diese Weise wird eine .tar -Datei aufgelistet.

Kurz nach der Einführung von gzip, etwa Mitte der neunziger Jahre, stellte derselbe Patentstreit die freie Verwendung des Bildformats .gif in Frage, das auf Bulletin Boards und im World Wide Web sehr verbreitet ist (eine neue Sache im Internet) Zeit). Daher hat eine kleine Gruppe das verlustfrei komprimierte PNG-Bildformat mit dem Dateityp .png erstellt, um .gif zu ersetzen. Dieses Format verwendet auch das Deflate-Format für die Komprimierung, das angewendet wird, nachdem Filter in den Bilddaten einen größeren Teil der Redundanz freigelegt haben. Um die Verbreitung des PNG-Formats zu fördern, wurden zwei kostenlose Codebibliotheken erstellt. libpng und zlib . libpng übernahm alle Funktionen des PNG-Formats, und zlib stellte den Komprimierungs- und Dekomprimierungscode zur Verfügung, der von libpng und anderen Anwendungen verwendet werden kann. zlib wurde aus dem Code gzip angepasst.

Alle genannten Patente sind inzwischen abgelaufen.

Die zlib-Bibliothek unterstützt die Deflate-Komprimierung und -Dekomprimierung sowie drei Arten des Wrappings um die Deflate-Streams. Dies sind: überhaupt kein Wrapping ("raw" deflate), zlib wrapping , das in den Datenblöcken im PNG-Format verwendet wird, und gzip wrapping, um gzip-Routinen für den Programmierer bereitzustellen. Der Hauptunterschied zwischen zlib- und gzip-Wrapping besteht darin, dass der zlib-Wrapping kompakter ist (sechs Bytes im Vergleich zu mindestens 18 Bytes für gzip) und die Integritätsprüfung Adler-32 schneller ausgeführt wird als der von gzip verwendete CRC-32. Raw Deflate wird von Programmen verwendet, die das .Zip -Format lesen und schreiben. Dies ist ein anderes Format, das deflate komprimierte Daten umschließt.

zlib wird mittlerweile in großem Umfang zur Datenübertragung und -speicherung eingesetzt. Beispielsweise komprimieren und dekomprimieren die meisten HTTP-Transaktionen von Servern und Browsern die Daten mit zlib.

Unterschiedliche Implementierungen von Deflate können zu unterschiedlichen komprimierten Ausgaben für die gleichen Eingabedaten führen, was durch das Vorhandensein auswählbarer Komprimierungsstufen belegt wird, mit denen die Komprimierungseffektivität für die CPU-Zeit abgewogen werden kann. zlib und PKZIP sind nicht die einzigen Implementierungen von Deflate-Komprimierung und -Dekomprimierung. Sowohl das 7-Zip-Archivierungsdienstprogramm als auch das Zopfli-Bibliothek von Google haben die Möglichkeit, viel mehr CPU-Zeit als zlib zu verbrauchen, um die letzten bei der Verwendung der Deflation möglichen Bits herauszufiltern Format, wodurch die komprimierten Größen im Vergleich zu zlibs höchster Komprimierungsstufe um einige Prozent reduziert werden. Das Dienstprogramm pigz , eine parallele Implementierung von gzip, enthält die Option, zlib (Komprimierungsstufen 1-9) oder zopfli (Komprimierungsstufe 11) zu verwenden, und verringert den zeitlichen Einfluss der Verwendung von zopfli durch Aufteilen der Komprimierung großer Dateien über mehrere Prozessoren und Kerne.

2365
Mark Adler

Zip ist ein Dateiformat zum Speichern einer beliebigen Anzahl von Dateien und Ordnern zusammen mit einer verlustfreien Komprimierung. Es werden keine strengen Annahmen über die verwendeten Komprimierungsmethoden getroffen, sondern am häufigsten mit DEFLATE verwendet.

Gzip ist sowohl ein auf DEFLATE basierender, aber weniger mit potenziellen Patenten belasteter Komprimierungsalgorithmus 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 die Erweiterung .tgz oder .tar.gz und wird im Allgemeinen als Tarball bezeichnet.

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

41

Der wichtigste Unterschied ist, dass gzip nur eine einzelne Datei komprimieren kann, während Zip mehrere Dateien nacheinander komprimiert und diese anschließend in einer einzigen Datei archiviert. Daher kommt gzip die meiste Zeit mit tar 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 Dateien wesentlich effektiver ist ähnlich (gleich).

27
Tim Zimmermann