¿Cómo se canaliza una corriente de entrada a un archivo comprimido cuando se lee con Java?

StackOverflow https://stackoverflow.com/questions/137645

  •  02-07-2019
  •  | 
  •  

Pregunta

Estoy deseando ejecutar un programa y, a medida que se ejecuta, lee en su salida y canaliza la salida en un archivo comprimido. La salida del programa puede ser bastante grande, por lo que la idea es no guardar demasiado en la memoria, simplemente enviarlo al zip cuando lo reciba.

¿Fue útil?

Solución

ZipOutputStream targetStream = new ZipOutputStream(fileToSaveTo);
ZipEntry entry = new ZipEntry(nameOfFileInZipFile);
targetStream.putNextEntry(entry);

byte[] dataBlock = new byte[1024];
int count = inputStream.read(dataBlock, 0, 1024);
while (count != -1) {
    targetStream.write(dataBlock, 0, count);
    count = inputStream.read(dataBlock, 0, 1024);
}

En otras palabras:

  1. Crea un ZipOutputStream y le da el archivo en el que desea escribir.
  2. Creas una ZipEntry, que constituye un archivo dentro de ese archivo zip. es decir, cuando abres myFile.zip, y hay 3 archivos ahí, cada archivo es un ZipEntry.

  3. Pones esa zipEntry en tu ZipOutputStream

  4. Cree un búfer de bytes para leer sus datos.
  5. Lea de su inputStream en su búfer de bytes, y recuerde el conteo.
  6. Si el recuento no es -1, escriba ese byte de byte en su zipStream.
  7. Lee la siguiente línea.

Cierre sus secuencias cuando haya terminado. Envuélvalo en un método como mejor le parezca.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top