Warum kann zip einzelne Dateien besser komprimieren als mehrere Dateien mit demselben Inhalt?
In der Lage zu sein, unsere Dateien zu komprimieren, sodass sie leichter freigegeben und / oder transportiert werden können, kann unser elektronisches Leben wesentlich einfacher machen. Manchmal werden jedoch nach dem Komprimieren ungewöhnliche oder unerwartete Größenänderungsergebnisse angezeigt. Warum das? Der heutige Q & A-Beitrag von SuperUser enthält Antworten auf die Fragen eines verwirrten Lesers.
Die heutige Question & Answer-Sitzung wird dank SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppierung von Q & A-Websites.
Foto mit freundlicher Genehmigung von Jean-Etienne Minh-Duy Poirrier (Flickr).
Die Frage
SuperUser reader sixtyfootersdude möchte wissen, warum zip einzelne Dateien besser komprimieren kann als mehrere Dateien mit demselben Inhaltstyp:
Angenommen, ich habe 10.000 XML-Dateien und möchte sie an einen Freund senden. Bevor ich sie schicke, möchte ich sie komprimieren.
Methode 1: Komprimieren Sie sie nicht
Ergebnisse:
Methode 2: Zippen Sie jede Datei separat und senden Sie ihr 10.000 komprimierte XML-Dateien
Befehl:
Ergebnisse:
Methode 3: Erstellen Sie eine einzelne ZIP-Datei, die alle 10.000 XML-Dateien enthält
Befehl:
Ergebnisse:
Methode 4: Verketten Sie die Dateien in einer einzelnen Datei und komprimieren Sie sie
Befehl:
Ergebnisse:
Fragen
- Warum erhalte ich so dramatisch bessere Ergebnisse, wenn ich nur eine einzige Datei komprimiere?
- Ich hatte erwartet, mit Methode 3 und nicht mit Methode 2 drastisch bessere Ergebnisse zu erzielen, aber ich weiß nicht. Warum ist das?
- Ist dieses Verhalten spezifisch für zip? Wenn ich es mit Gzip versuchte, würde ich andere Ergebnisse erzielen?
Zusätzliche Information
Metadaten
Eine der Antworten gibt an, dass der Unterschied in den Systemmetadaten besteht, die in der ZIP-Datei gespeichert sind. Ich glaube nicht, dass dies der Fall sein kann. Um es zu testen, habe ich Folgendes getan:
Die resultierende ZIP-Datei hat 1,4 MB. Dies bedeutet, dass noch ungefähr zehn MB unerklärlicher Speicherplatz vorhanden sind.
Warum kann zip einzelne Dateien besser komprimieren als mehrere Dateien mit dem gleichen Inhaltstyp?
Die Antwort
Die Superuser-Mitwirkenden Alan Shutko und Aganju haben die Antwort für uns. Zunächst einmal Alan Shutko:
Die Zip-Komprimierung basiert auf sich wiederholenden Mustern in den zu komprimierenden Daten, und die Komprimierung wird umso besser, je länger die Datei ist, da immer mehr Muster gefunden und verwendet werden können.
Vereinfacht: Wenn Sie eine Datei komprimieren, ist das Wörterbuch, das (kurze) Codes (längeren) Mustern zuordnet, notwendigerweise in jeder resultierenden ZIP-Datei enthalten. Wenn Sie eine lange Datei komprimieren, wird das Wörterbuch "wiederverwendet" und wird im gesamten Inhalt noch effektiver.
Wenn Ihre Dateien sogar ein wenig ähnlich sind (Text ist immer), ist die Wiederverwendung des 'Wörterbuchs' sehr effizient und das Ergebnis ist eine viel kleinere ZIP-Datei.
Gefolgt von der Antwort von Aganju:
In zip wird jede Datei separat komprimiert. Das Gegenteil ist der Fall solide Kompression, Das heißt, Dateien werden zusammen komprimiert. 7-zip und Rar verwenden standardmäßig eine solide Komprimierung. Gzip und Bzip2 können nicht mehrere Dateien komprimieren, daher wird Tar zuerst verwendet und hat den gleichen Effekt wie die Volltonkomprimierung.
Da XML-Dateien eine ähnliche Struktur haben (und wahrscheinlich einen ähnlichen Inhalt haben), ist die Komprimierung höher, wenn die Dateien zusammen komprimiert werden.
Wenn zum Beispiel eine Datei die Zeichenfolge "
”Und der Kompressor diesen String bereits in einer anderen Datei gefunden hat, wird er durch einen kleinen Zeiger auf den vorherigen Treffer ersetzt. Wenn der Kompressor keine feste Komprimierung verwendet, wird das erste Vorkommen der Zeichenfolge in der Datei als a aufgezeichnet wörtlich, das ist größer.
Haben Sie der Erklärung etwas hinzuzufügen? Sound off in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.