Frage Warum erscheint eine Zip-Datei größer als die Quelldatei, besonders wenn es sich um Text handelt?


Ich habe eine Textdatei, die 19 Bytes groß ist und die Datei mit zip und 7zip komprimiert hat, scheint es größer zu sein. Ich habe die Frage gelesen Warum ist eine 7zip-Datei größer als die Raw-Datei? ebenso gut wie Warum komprimiert die ZIP-Komprimierung nichts? Aber da die Datei nicht bereits komprimiert ist, hätte ich eine weitere Komprimierung erwartet. Anbei ist ein Screenshot.

enter image description here

EDIT0

Ich nahm das Beispiel weiter, indem ich wie folgt eine Datei mit zufälligen Daten erstellte dd if=/dev/urandom of=sample.log bs=1G count=1 und versuchte, die Datei sowohl mit zip als auch mit 7zip zu komprimieren, jedoch gab es keine Kompressionsgewinne. Warum das?

enter image description here


4
2017-08-29 06:39


Ursprung


Und das ist eine 1 GB Log-Datei im Klartext? - CyberSkull
@ CyberSkull - Ja ist es. - PeanutsMonkey
Können Sie uns bitte sagen, was Ihre Zip-Parameter waren? Ich hätte so etwas gemacht zip -9T "example.zip" sample.log (-t ist nur um die Integrität des Archivs zu testen.). - CyberSkull
Zufällige Daten von / dev / urandom tun dies nicht eine echte Textdatei erzeugen; es wird überhaupt nicht gut verdichten. Textbytes sind im Bereich begrenzt, mit vielen Leerzeichen und sich wiederholenden Mustern (z.B. "th" und "sp") und Wörtern. Sie haben tatsächlich eine zufällige Binärdatei erzeugt. - Ken
@ CyberSkull: Nein, Sie haben einen zufälligen Strom von ASCII-Zeichen. Das ist etwas kompressibler als zufälliges Binärformat, aber immer noch nicht so strukturiert wie Text. - Ben Voigt


Antworten:


Wie @kinokijuf sagte, gibt es einen Dateikopf. Aber um darüber zu sprechen, gibt es ein paar andere Dinge, die man über Dateikomprimierung verstehen sollte.

Der zip-Header enthält alle notwendigen Informationen zur Identifizierung des Dateityps (die magische Zahl), die zip-Version und schließlich eine Auflistung aller im Archiv enthaltenen Dateien.

Ihre Datei wurde wahrscheinlich nicht komprimiert. Wenn du läufst unzip -l example.zip Sie werden wahrscheinlich sehen, dass die Dateigröße unverändert ist. 19 Bytes würden wahrscheinlich mehr Overhead erzeugen, als wenn sie durch DEFLATE komprimierbar wäre (die Hauptkomprimierungsmethode, die von zip verwendet wird).

In anderen Fällen, zum Beispiel bei PNG-Bildern, sind sie bereits komprimiert, sodass zip sie nur speichert. DEFLATE wird sich nicht darum kümmern, bereits Komprimierte zu komprimieren.

Wenn Sie auf der anderen Seite viele Textdateien hätten und ihre Größe mehr als ein paar Kilobyte betragen würde, würden Sie große Einsparungen erzielen, wenn Sie alle in ein Single Zip-Archiv.

Bei der Komprimierung sehr normaler, formatierter Daten, wie z. B. einer Textdatei mit einem SQL-Dump, erzielen Sie die besten Einsparungen. Zum Beispiel hatte ich einmal eine kleine SQL-Datenbank mit ungefähr 13 MB. ich rannte zip -9 dump.sql dump.zip darauf und endete mit etwa 1 MB danach.

Ein weiterer Faktor ist Ihre Komprimierungsstufe. Viele Archiver werden standardmäßig nur auf mittlerer Stufe komprimiert, wobei die Geschwindigkeit über die Reduzierung hinausgeht. Versuchen Sie beim Komprimieren mit zip den -9 Flag für maximale Komprimierung (ich denke, das 3.x Handbuch sagt, dass Komprimierungsstufen nur von DEFLATE zu diesem Zeitpunkt unterstützt werden).

TL; DR

Der Overhead für das Archiv überstieg alle Vorteile, die Sie möglicherweise beim Komprimieren der Datei erzielt haben. Versuchen Sie, größere Textdateien hinein zu legen und zu sehen, was Sie bekommen. Benutze die -v Markieren Sie beim Zippen, um Ihre Ersparnisse zu sehen.


7
2017-08-29 07:08



Wenn Sie sagen, dass die Dateigröße unverändert ist, wenn ich sie entzippen wollte, meinen Sie die Größe des Archivs? Zweitens, wenn ich eine andere Komprimierungsmethode als DEFLATE wie PPMD ​​verwenden würde, wird es einen Unterschied machen? Also wenn du das sagst -V Flagge meinst du, wenn ich das ausführe zip Befehl? - PeanutsMonkey
Wenn Sie Dateityp meinen, meinen Sie auch die Art der Datei, deren Quelle z. Text, MP3, usw.? - PeanutsMonkey


Weil der Overhead von .zip-Headern ist Weg größer als 19 Bytes.


4
2017-08-29 06:43



Wie wirkt sich das auf größere Textdateien aus? - PeanutsMonkey


Die Komprimierung entfernt redundante Informationen, die bei stark strukturierten Daten angezeigt werden.

Daraus sollte ersichtlich sein, dass bereits komprimierte Dateien nicht weiter komprimiert werden können, weil die Redundanz bereits weg ist, sondern auch, dass zufällige Daten nicht gut komprimiert werden, da sie niemals eine Struktur oder Redundanz aufwiesen.

Es gibt eine ganze Wissenschaft, Informationstheorie, die sich mit der Messung der Dichte von Informationen (und gegenseitigen Informationen) beschäftigt und Redundanz und Struktur verwendet, um Kompression, Angriffe auf Verschlüsselung und Fehlererkennung und -wiederherstellung durchzuführen.


1
2018-05-28 19:27