java.util.zip - ZipInputStream v. s. ZipFile

Habe ich einige Allgemeine Fragen bezüglich der java.util.zip Bibliothek.
Was wir im Grunde tun, ist eine import-und eine export-von vielen kleinen Komponenten. Bereits diese Komponenten wurden importiert und exportiert, mit einer einzigen großen Datei, z.B.:

<component-type-a id="1"/>
<component-type-a id="2"/>
<component-type-a id="N"/>

<component-type-b id="1"/>
<component-type-b id="2"/>
<component-type-b id="N"/>

Bitte beachten Sie, dass die Reihenfolge der Komponenten beim import relevant ist.

Nun jede Komponente einnehmen soll seine eigene Datei, die sollte extern versioniert, QA-ed, bla, bla. Wir beschlossen, dass die Ausgabe von export-sollten Sie eine zip-Datei (mit all diesen Dateien in) und den input unserer import sollte eine ähnliche zip-Datei. Wir wollen nicht explodieren, die zip-in unserem system. Wir wollen nicht öffnen separate streams für die einzelnen kleinen Dateien. Meine aktuellen Fragen:

Q1. Kann die ZipInputStream garantieren, dass die zip-Einträge (kleine Dateien) gelesen werden, in der gleichen Reihenfolge, in der Sie eingefügt wurden, durch unsere export verwendet ZipOutputStream? Ich nehme an, das Lesen ist so etwas wie:


ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null) 
{
       //read from zis until available
}

Ich weiß, dass die zentrale zip-Verzeichnis wird auf das Ende der zip-Datei aber trotzdem die Einträge in der Datei drinnen haben sequenzieller Reihenfolge. Ich weiß auch, dass das Vertrauen auf die Reihenfolge ist eine hässliche Vorstellung, aber ich möchte einfach alle Fakten im Kopf.

Q2. Wenn ich ZipFile (was ich bevorzuge) was ist die Auswirkung auf die performance von Aufruf getInputStream() Hunderte Male? Wird es langsamer sein, als die ZipInputStream Lösung? Die zip ist nur einmal geöffnet und ZipFile ist gesichert durch RandomAccessFile - ist das richtig?
Ich nehme an, das Lesen ist so etwas wie:


ZipFile zipfile = new ZipFile(argv[0]);
Enumeration e = zipfile.entries();//TODO: assure the order of the entries
while(e.hasMoreElements()) {
        entry = (ZipEntry) e.nextElement();
        is = zipfile.getInputStream(entry));
}

Q3. Sind die input-streams werden aus der gleichen ZipFile thread-sicher (z.B. kann ich Las verschiedene Einträge in verschiedenen threads gleichzeitig)? Irgendwelche Leistungseinbußen?

Dank für Eure Antworten!

InformationsquelleAutor Lachezar Balev | 2011-01-11

Schreibe einen Kommentar