2011-12-03 30 views
5

Estoy intentando convertir una matriz de bytes en un archivo ZIP. Tengo bytes usando el siguiente código:Cómo puedo convertir una matriz de bytes en un archivo ZIP

byte[] originalContentBytes= new Verification().readBytesFromAFile(new File("E://file.zip")); 

private byte[] readBytesFromAFile(File file) { 
    int start = 0; 
    int length = 1024; 
    int offset = -1; 
    byte[] buffer = new byte[length]; 
    try { 
     //convert the file content into a byte array 
     FileInputStream fileInuptStream = new FileInputStream(file); 
     BufferedInputStream bufferedInputStream = new BufferedInputStream(
       fileInuptStream); 
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

     while ((offset = bufferedInputStream.read(buffer, start, length)) != -1) { 
      byteArrayOutputStream.write(buffer, start, offset); 
     } 

     bufferedInputStream.close(); 
     byteArrayOutputStream.flush(); 
     buffer = byteArrayOutputStream.toByteArray(); 
     byteArrayOutputStream.close(); 
    } catch (FileNotFoundException fileNotFoundException) { 
     fileNotFoundException.printStackTrace(); 
    } catch (IOException ioException) { 
     ioException.printStackTrace(); 
    } 

    return buffer; 
} 

Pero mi problema ahora es con la conversión de la matriz de bytes de nuevo en un archivo ZIP - ¿cómo puede hacerse esto?

Nota: El ZIP especificado contiene dos archivos.

+0

¿Qué es exactamente lo que quieres? ¿Desea volver a escribir los bytes en el disco en un archivo zip? ¿O quieres leer los contenidos? Los bytes de cómo los lee no están decodificados todavía. – morja

+0

@ morja -> sí quiero escribir los bytes en el disco en forma de archivo zip. – Mohan

+0

Bueno, pero luego solo escriba los bytes en el disco con un FileOutputStream y el nombre del archivo .zip. ¿No quieres escribir los archivos extraídos? – morja

Respuesta

17

para obtener el contenido de los bytes que se pueden utilizar

ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(bytes)); 
ZipEntry entry = null; 
while ((entry = zipStream.getNextEntry()) != null) { 

    String entryName = entry.getName(); 

    FileOutputStream out = new FileOutputStream(entryName); 

    byte[] byteBuff = new byte[4096]; 
    int bytesRead = 0; 
    while ((bytesRead = zipStream.read(byteBuff)) != -1) 
    { 
     out.write(byteBuff, 0, bytesRead); 
    } 

    out.close(); 
    zipStream.closeEntry(); 
} 
zipStream.close(); 
+0

Esto me ayuda a obtener el nombre de la entrada que está presente dentro del archivo comprimido. Usando esto solo podemos leer el contenido. pero ¿cómo podemos almacenarlo en el disco? – Mohan

+0

Puede leer los bytes de zipStream y luego escribirlos con FileOutputStream. O directamente escríbalo nuevamente. Ver mi actualización – morja

+0

Muchas gracias, funciona perfecto. – Mohan

5

Usted probablemente en busca de código como este:

ZipInputStream z = new ZipInputStream(new ByteArrayInputStream(buffer)) 

ahora usted puede conseguir el contenido del archivo zip a través getNextEntry()

Cuestiones relacionadas