Hola,
Necesito leer los bytes contenidos en un ZipOutputStream, ya sea en un byte[], InputStream, ....
Se pasar de un Output a un InputStream, pero no de un ZipOutputStream
alguna idea?
muchas gracias
| ||||
Un ejemplo breve con ZipInputStream es: ----------------- public ProcesoRecuperacion(ZipInputStream zipInputStream) throws IOException { byte[] bytes = readBytes(zipInputStream); } byte[] bytes = readBytes(zipInputStream); private byte[] readBytes(InputStream inputStream) throws IOException { byte[] bytes = null; byte[] buffer = new byte[4096]; int bytesRead = 0; while ( (bytesRead = inputStream.read(buffer)) != -1) { if (bytes!=null) { byte[] oldBytes = bytes; bytes = new byte[oldBytes.length+bytesRead]; System.arraycopy(oldBytes, 0, bytes, 0, oldBytes.length); System.arraycopy(buffer, 0, bytes, oldBytes.length, bytesRead); } else { bytes = new byte[bytesRead]; System.arraycopy(buffer, 0, bytes, 0, bytesRead); } } return bytes; } Pero para que sepas más a fondo ve a esta URL: http://java.sun.com/developer/techni...g/compression/ Un saludo.
__________________ Ani Alamo Gómez de González "Sin Dios no soy nada en este mundo, sin El nada puedo ser... ni las hojas de los árboles se mueven, sino es por su gran poder. Bendito seas Señor." Última edición por Ani Alamo; 20/03/2006 a las 14:50 |
| ||||
Se que es de escritura pero... Hola, gracias por vuestras respuestas, Ani, el ejemplo que me pones es con ZipINPUTStream y no con ZipOutputStrem. Greeneyed, se que es de escritura pero pensé que al igual que con un ByteArrayOutputStream puedes sacar los bytes, igual había alguna forma de hacerlo con el Zip. El problema es que no quiero escribir en ningún fichero, quiero hacerlo en memoria. La idea es que necesito contruir varios zips (ya lo tengo hecho) y a su vez, meter todos estos zips dentro de un zip global para que se lo descarguen. gracias x todo
__________________ Lo importante no es saber sino saber el teléfono del que sabe, jajaja. |
| |||
Hola, El problema es que ByteArrayOutputStream es un OutputStream "final", es decir, especifica ya un destino para los bytes (en este caso un array), igual que un FileOutputStream especifica un fichero... pero ZipOutputStream NO es un stream "final" y ha de ir montado sobre uno final, que es de donde tu podras leer los bytes. Es decir, has de crear un ByteArrayOutputStream o un FileOutputStream y sobre el montar un ZipOutputStream. Cuando acabes de usar el stream, los bytes estaran en memoria en el array o en el fichero, segun el stream final que hayas usado. |
| |||
Respuesta: Pasar de ZipOutputStream a bytes Este tema es viejo pero es el primero que me aparecia en todas mis busquedas al intentar hacer algo parecido, espero le sirva a alguien mi comentario.... Si lo que quieres es generar un zip en bytes se soluciona con lo siguiente: ByteArrayOutputStream baos = new ByteArrayOutputStream(); ZipOutputStream out = new ZipOutputStream(baos); .... todo el codigo para crear tu zipoutputStream .... baos.toByteArray(); y listo, espero se de ayuda para alguien. |