Hallo,
ich habe mal ein (hoffentlich) einfaches Problem mit dem ZipOutputStream.
Betrachten wir folgenden funktionierenden Code:
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:
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
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();
}
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();
}
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