2012-06-19 24 views
5

¿Hay alguna forma de encontrar/estimar el tamaño de ZipInputStream antes de leer completamente la secuencia?Obtener el tamaño de ZipInputStream

Por ejemplo, podemos obtener los metadatos de la entrada con getNextEntry antes de poder leer los datos del usuario.

Inputstream tiene un método disponible() para devolver una estimación del número de bytes que se pueden leer de esta secuencia de entrada, pero no puedo encontrar un método similar para ZipInputStream.

+0

¿Tiene acceso al ZipFile de donde vino la transmisión? – Thilo

+0

No. Acabamos de recibir una transmisión. Quería saber si había alguna forma de obtener los metadatos antes de leer la transmisión completa. –

Respuesta

1

ZipInputStream tiene método disponible() pero devuelve 0 o 1.

para obtener el tamaño estimado de cualquier tipo de archivo, puede utilizar FileInputStream y después de leer utilización archivo zip ZipInputStream. Ej.

public class ZipUtil { 

    public static void main(String[] args) throws Exception { 
     ZipInputStream zis = null; 

     FileInputStream fis = new FileInputStream("C:/catalina.zip"); 
     int size = fis.available(); 
     System.out.println("size in KB : " + size/1024); 
     zis = new ZipInputStream(fis);   

     ZipEntry ze; 
     while ((ze = zis.getNextEntry()) != null) { 
      System.out.println(ze.getName()); 
     } 
    } 
} 
+0

El problema con este enfoque es que no tengo un archivo comprimido que pueda convertir en un FileInputStream. Solo tengo un ZipInputStream para trabajar. –

+0

Comparta su código para comprender mejor sus requisitos –

+1

Existe una advertencia específica en el Javadoc contra el uso de available() como valor de tamaño total. – EJP

2

Si solo tiene el flujo, entonces no lo creo.

El zip file format tiene solo una secuencia de entradas, y luego un directorio global (que tiene una tabla de todos los archivos y sus tamaños) al final. Entonces, sin acceso al archivo, no obtendrás esa información.

1

InputStream tiene un método disponible() para devolver una estimación del número de bytes que se puede leer a partir de este flujo de entrada

sin bloquear. No es lo mismo. Hay una advertencia específica en el Javadoc sobre no tratando este valor como un tamaño de archivo total.

pero no puedo encontrar un método similar para ZipInputStream.

Eso es extraño porque está allí. Sin embargo, devuelve cero, que es la mejor estimación que puede hacer de cuánto se puede leer sin bloquear.

¿Por qué? Porque (a) es una secuencia y (ii) es una secuencia comprimida. No hay forma de saber cuánto hay sin leerlo todo; y no hay forma de saber cuánto de eso se puede leer sin bloquear,

Cuestiones relacionadas