Warum ist eine einfache JAR-Datei auf 76% komprimiert, wird aber nach ProGuard verkleinert & obfuscate; es ist auf 102% komprimiert?! Wie repariert man?

572
Saleh Feek

Ich habe eine Jar-Datei der Größe 392 MB. Ich habe eine weitere Kopie davon gemacht, also habe ich jetzt zwei Kopien derselben Jar-Datei.

Für einen von ihnen habe ich 7-zip zum Komprimieren verwendet. Es ist auf 76% der ursprünglichen Größe komprimiert, dh 298 MB

Für den anderen; Ich habe proGuard zuerst benutzt, um es zu verkleinern und zu verschleiern. Nach dem Verkleinern sank die Größe auf 348 MB. Danach habe ich es mit 7-zip komprimiert. Es ist auf 102% der geschrumpften Größe von 355 MB komprimiert !!!

Was ist falsch?
Wie repariert man?

-1
Compassion basiert auf den Daten. Wenn dies nicht für die Komprimierung gedacht ist (Video, Audio, Verschleierung), geschieht dies. Nichts ist falsch. Es funktioniert wie beabsichtigt Ramhound vor 8 Jahren 0
@ Ramhound; beide sind dasselbe Glas, aber einer hat einen zusätzlichen Schritt (Verkleinern und Verschleiern) - das Format wird dadurch nicht geändert. Es ist immer noch ein Gefäßformat - Was mich beunruhigt, ist, dass es nicht zusammengedrückt wird wie das nicht geschrumpfte, nicht verschleierte !! - OK, dann muss ich nur das unkomprimierte Glas verschicken. Saleh Feek vor 8 Jahren 0
Recht; die Verschleierung ist schuld; Ramhound vor 8 Jahren 3
Ich stimme mit @Ramhound überein, dies ist nicht mehr die gleiche Datei ... sie wurde geändert, bereinigt und verschleiert, sie unterscheidet sich von der Originaldatei, es gibt keine Garantie, dass sie genauso komprimiert wird wie die Originaldatei jetzt anders acejavelin vor 8 Jahren 2
Wäre es nicht schön, eine Datei mit einer Anwendung komprimieren zu können, dann diese Ausgabe zu nehmen und erneut zu komprimieren und diese Ausgabe zu nehmen und erneut zu komprimieren usw., bis die Datei nur noch 1 Byte groß ist? Komprimierung und Verschlüsselung zielen darauf ab, die resultierenden Daten zufällig zu machen, und Sie können dies nur zufällig erreichen. Irgendwann stellen Sie gerade das Chaos um. Ron Maupin vor 8 Jahren 0

1 Antwort auf die Frage

1
Mokubai

Durch das Ersetzen von Funktionsnamen durch nahezu zufällige Namen, das Ändern der Aufrufmuster für die Funktionen und das Vorkomprimieren der Datei ("Verkleinern") entfernen Sie effektiv alle sich wiederholenden Blöcke, die ein Komprimierungsalgorithmus sehen kann, und verwenden die Datei, um die Datei weiter zu komprimieren.

Ohne sich wiederholende Blöcke im Datenstrom gibt es nichts, was ein Kompressionsalgorithmus tun kann, um doppelte Blöcke zu entfernen. Der Grund dafür, dass die Dateigröße zunimmt, ist, dass die Kompressionsmethode ihre eigenen Overheads hat, die sie in eine Ausgabedatei schreibt. Der Kompressor verfügt über ein Wörterbuch mit "Phrasen", die innerhalb der Datei dupliziert werden. Die komprimierte Datei enthält im Wesentlichen eine Liste von Nachschlägen zu diesem Wörterbuch. Wenn jedoch keine Duplikate in der Datei vorhanden sind, werden das Wörterbuch zu einer Kopie der Originaldatei und der Nachschlage sind immer noch da, wobei jeder auf nur einen Eintrag im Wörterbuch zeigt.

Dies bedeutet, dass bei einer bereits komprimierten Datei die Ausgabedatei nicht kleiner als die Originaldatei sein kann. Am Ende speichern Sie immer die gesamte Datei zusammen mit einer Nachschlagetabelle, die dem Dekomprimierungsalgorithmus mitteilt, wie die Originaldatei wiederhergestellt werden soll.