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

Tengo algunas preguntas generales sobre eljava.util.zip biblioteca. Lo que básicamente hacemos es importar y exportar muchos componentes pequeños. Anteriormente, estos componentes se importaban y exportaban utilizando un único archivo grande, por ejemplo:

<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"/>

Tenga en cuenta que el orden de los componentes durante la importación es relevante.

Ahora cada componente debe ocupar su propio archivo, que debe serexternamente versionado, control de calidad, bla, bla. Decidimos que el resultado de nuestra exportación debería ser un archivo zip (con todos estos archivos) y la entrada de nuestra importación debería ser un archivo zip similar. No queremos explotar el zip en nuestro sistema. No queremos abrir secuencias separadas para cada uno de los archivos pequeños. Mis preguntas actuales:

Q1. Puede elZipInputStream garantiza que las entradas zip (los pequeños archivos) se leerán en el mismo orden en que fueron insertadas por nuestra exportación que utilizaZipOutputStream? Asumo que leer es algo como:


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

Sé que el directorio zip central se coloca al final del archivo zip pero, sin embargo, las entradas del archivo en su interior tienen un orden secuencial. También sé que confiar en el pedido es una idea fea, pero solo quiero tener en cuenta todos los hechos.

Q2 Si yo usoZipFile (que prefiero) cuál es el impacto en el rendimiento de las llamadasgetInputStream() ¿cientos de veces? ¿Será mucho más lento que elZipInputStream ¿solución? La cremallera se abre solo una vez yZipFile está respaldado porRandomAccessFile - ¿es esto correcto? Asumo que leer es algo como:


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. ¿Se recuperan las secuencias de entrada de la mismaZipFile hilo seguro (por ejemplo, ¿puedo leer diferentes entradas en diferentes hilos simultáneamente)? ¿Alguna penalización de rendimiento?

¡Gracias por tus respuestas!

Respuestas a la pregunta(3)

Su respuesta a la pregunta