Input/Output ZipOutputStream erzeugt zu großes .zip-Archiv

Seikuassi

Aktives Mitglied
Hallo,

ich habe mal ein (hoffentlich) einfaches Problem mit dem ZipOutputStream.
Betrachten wir folgenden funktionierenden Code:
Java:
try(ZipOutputStream zip=new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("./Test.zip")),StandardCharsets.UTF_8)){
   for(int i=0;i<500;i++){
      zip.putNextEntry(new ZipEntry("entry"+Integer.valueOf(i)+".dat"));
      zip.write(new String("HalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHallo").getBytes(StandardCharsets.UTF_8));
      zip.closeEntry();
   }
   zip.finish();
}
Optionale Frage:Warum wird keine Datei mit dem DEFLATED-Modus komprimiert. Alle Dateien sind 140 Bytes groß (keine Kompression).

Deswegen dachte ich in meinem jugendlichen Leichtsinn :), dass ich einfach den DeflaterOutputStream verwende mit einem ByteArrayOutputStream und diesen in einen bzw. mehrer ZipEntry(s) schreibe:
Java:
try(ZipOutputStream zip=new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("./Test.zip")),StandardCharsets.UTF_8)){
   for(int i=0;i<500;i++){
      try(ByteArrayOutputStream b=new ByteArrayOutputStream();
      DeflaterOutputStream defl=new DeflaterOutputStream(new BufferedOutputStream(b))){
         defl.write(new String("HalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHalloHallo").getBytes(StandardCharsets.UTF_8));
         defl.finish();
         defl.flush();
         zip.putNextEntry(new ZipEntry("entry"+Integer.valueOf(i)+".dat"));
         zip.write(b.toByteArray());
         zip.closeEntry();
         b.reset();
      }
   }
   zip.finish();
}
Die Dateien (Einträge) in dem .zip-Archiv sind zwar jetzt nur noch 16 Byte groß (statt 140 Byte), das gesamte .zip-Archiv ist allerdings wie vorher noch immer etwa 67,3 kB groß.
Frage:Wie kann das sein?
Im Hex-Editor habe ich außerdem gesehen, dass scheinbar für jeden Eintrag die ZIP-Signatur (PK...) neu geschrieben wurde, was natürlich ein Grund ist, dass das Archiv so groß ist.
Wo liegt also der Fehler?

Danke im Voraus!

Mit freundlichen Grüßen

Seikuassi
 

Seikuassi

Aktives Mitglied
Gut bei dem obersten Code ist ein Kompressionsgrad von 1,04 (70000 B/67300 B) erreicht worden.
Doch bei dem DeflaterOutputStream ist ein Kompressionsgrad von 8,75 (140 B/16 B) erreicht worden. Wie kann das also sein, dass das .zip-Archiv viel größer ist, als alle Größen seiner Einträge zusammen ergeben?

Danke nochmal im Voraus!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M ZipOutputStream gleiche Datei andere Größe? Allgemeine Java-Themen 0
dayaftereh ImageWriter und ZipOutputStream Allgemeine Java-Themen 3
TheJavaKid zipoutputstream: passwortschutz Allgemeine Java-Themen 5
G ZipOutputStream problem Allgemeine Java-Themen 3
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
I PDF-Drucker erzeugt nur A4-Seiten Allgemeine Java-Themen 2
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
Antoras Micro-benchmark für parallel vs. sequentiell erzeugt unerwartetes Ergebnis Allgemeine Java-Themen 8
H XML-File mit Java erzeugt Frage Allgemeine Java-Themen 10
H Wie erzeugt man einen Daemon? Allgemeine Java-Themen 7
N FileOutputStream erzeugt datei Allgemeine Java-Themen 8
N Servlet welches PDF erzeugt Allgemeine Java-Themen 10
G Hibernate search (Lucene) - Index wird nicht rechtzeitig erzeugt? Allgemeine Java-Themen 2
P Java TrayIcon erzeugt hohe Systemauslastung Allgemeine Java-Themen 5
K Programm erzeugt Seitenfehler Allgemeine Java-Themen 2
G Programm erzeugt ständig neue Strings . Allgemeine Java-Themen 2
A Exception in Konstruktor - trotzdem wird Objekt erzeugt! Allgemeine Java-Themen 3
E Sonderzeichen nicht setzbar: Großes Problem bei Programmierung unter Linux Mint mit Virtual Box Allgemeine Java-Themen 5
B Großes Projekt "gut" schreiben Allgemeine Java-Themen 22
R Großes Hash-Set erzeugen Allgemeine Java-Themen 12
C JEditorPane langsam großes HTML Allgemeine Java-Themen 8
V aus mehreren jar files, ein großes basteln Allgemeine Java-Themen 22
T Datenstruktur für großes Netz Allgemeine Java-Themen 2
G Großes Programm - Wie Strukturieren? Allgemeine Java-Themen 19
A Großes Problem mit dem Lesen großer Datenmengen Allgemeine Java-Themen 16

Ähnliche Java Themen


Oben