GZipStream und DeflateStream erzeugen größere Dateien

8

Ich versuche, deflate / gzip Streams in C # zu verwenden, aber es scheint, dass die Dateien nach der Komprimierung größer sind als vorher.

Zum Beispiel, ich komprimiere eine docx-Datei von 900ko, aber es produziert eine 1.4Mo one!

Und es tut es für jede Datei, die ich ausprobiert habe.

Vielleicht liege ich falsch in der Art, wie ich es mache? Hier ist mein Code:

%Vor%     
kite 05.10.2010, 13:27
quelle

5 Antworten

7

So ein großer Unterschied scheint mir seltsam, aber Sie sollten bedenken, dass docx selbst in ZIP komprimiert ist, also gibt es keinen Grund, sie erneut zu komprimieren, die Ergebnisse sind normalerweise größer.

    
Andrey 05.10.2010, 13:32
quelle
2

Erstens sind deflate / gzip-Streams bei Komprimierung bemerkenswert schlecht im Vergleich zu zip, 7z usw.

Zweitens sind docx (und alle MS-Dokumentformate mit einem "x" am Ende) nur .zip-Dateien. Benennen Sie ein .docx in .zip um, um den Rauch und die Spiegel zu enthüllen.

Wenn Sie also deflate / gzip über ein docx ausführen, wird die Datei tatsächlich größer. (Es ist so, als würde man eine komprimierte Zip-Datei über eine gezippte Datei mit hoher Komprimierung erstellen.)

Wenn Sie jedoch deflate / gzip über HTML oder eine Textdatei oder etwas, das nicht komprimiert ist, ausführen, wird es tatsächlich einen ziemlich guten Job machen.

    
DJA 05.10.2010 13:39
quelle
0

Obwohl es stimmt, wie andere gezeigt haben, dass die von Ihnen angegebenen Beispieldateien bereits komprimiert sind, ist das größte Problem, dass im Gegensatz zu den meisten Komprimierungsprogrammen DeflateStream und GZipStream -Klassen versuchen einfach, einen Datenstrom zu tokenisieren / komprimieren, ohne dass die Intelligenz, dass alle zusätzlichen Token (Overhead) tatsächlich die Menge der benötigten Daten erhöhen. Zip, 7z usw. sind schlau genug zu wissen, dass, wenn Daten weitgehend zufällig sind (praktisch nicht komprimierbar), sie einfach die Daten "wie sie sind" (speichern, nicht komprimiert) speichern, anstatt zu versuchen, sie weiter zu komprimieren / p>     

Michael 05.10.2010 14:21
quelle
0

Ich hatte das gleiche Problem beim Komprimieren von Datenbanken mit JPG-Daten. Ich habe dotnetzip ausprobiert - ein Ersatzgeld und eine ordentliche Komprimierung (unterstützt auch Compact Framework!):

%Vor%     
Andy Joiner 11.10.2011 14:53
quelle
-2

Ich glaube nicht, dass GzipStream und DeflateStream Dateien komprimieren sollen. Sie hätten wahrscheinlich mehr Glück mit einem Dateikomprimierer wie SharpZipLib .

    
Dave Swersky 05.10.2010 13:32
quelle

Tags und Links