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?
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?
Antworten:
Kurzform:
.zip
ist ein Archivformat , das normalerweise die Deflate-Komprimierungsmethode verwendet . Das .gz
gzip-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 .zip
Datei, 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 zip
und unzip
Dienstprogramme, die die Komprimierung mit dem Deflate-Format und die Dekomprimierung dieses und der früheren Formate unterstützten. Dies hat die Verwendung des .zip
Formats erheblich erweitert .
In den frühen 90er Jahren wurde das gzip-Format als Ersatz für das Unix- 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 ein .Z
an den Dateinamen anzuhängen. compress
verwendet 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- gzip
Dienstprogramm war als Ersatz für gedachtcompress
und ist in der Tat in der Lage, compress
komprimierte Daten zu dekomprimieren (vorausgesetzt, Sie konnten diesen Satz analysieren). gzip
Hängt ein .gz
an den Dateinamen an. gzip
verwendet 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 compress
zulässige Format, wie z. B. der ursprüngliche Dateiname und die Änderungszeit der Datei.
Obwohl compress
nur eine einzelne Datei komprimiert wird, war es üblich, das tar
Dienstprogramm zu verwenden, um ein Archiv von Dateien, ihren Attributen und ihrer Verzeichnisstruktur in einer einzigen .tar
Datei zu erstellen und diese dann zu komprimieren compress
, um eine .tar.Z
Datei zu erstellen. Tatsächlich tar
hatte und hat das Dienstprogramm die Möglichkeit, die Komprimierung gleichzeitig durchzuführen, anstatt die Ausgabe von tar
to weiterleiten zu müssen compress
. Dies alles wurde auf das gzip-Format übertragen und tar
bietet die Möglichkeit, direkt auf das .tar.gz
Format zu komprimieren . Das tar.gz
Format wird besser komprimiert als der .zip
Ansatz, da bei der Komprimierung von a .tar
die Redundanz zwischen Dateien, insbesondere vielen kleinen Dateien, ausgenutzt werden kann. .tar.gz
ist 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.bz2
und .tar.xz
archivieren.
Im Gegensatz zu .tar
, .zip
hat 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 .zip
Datei. Eine .tar
Datei müsste dekomprimiert und von Anfang bis Ende gescannt werden, um ein Verzeichnis zu erstellen. So wird eine .tar
Datei aufgelistet.
Kurz nach der Einführung von gzip, etwa Mitte der neunziger Jahre, stellte derselbe Patentstreit die freie Verwendung des .gif
Bildformats 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 gzip
Code 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 .zip
Format 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: deflate
bedeutet 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.
.tar.gz
Dateien 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.)
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 .tgz
oder .tar.gz
und wird üblicherweise als Tarball bezeichnet .
zlib ist eine Bibliothek von Funktionen, die DEFLATE in seiner häufigsten LZ77- Inkarnation einkapseln .
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).