Come si reindirizza un inputstream a un file zippato mentre viene letto con Java?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Voglio eseguire un programma e mentre viene eseguito viene letto nell'output e convoglia l'output in un file zippato. L'output del programma può essere piuttosto grande, quindi l'idea è di non tenere troppo in memoria - solo per inviarlo allo zip mentre lo ottengo.

È stato utile?

Soluzione

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);
}

In altre parole:

  1. Si crea ZipOutputStream, dandogli il file in cui si desidera scrivere.
  2. Si crea un ZipEntry, che costituisce un file all'interno di quel file zip. cioè quando apri myFile.zip e ci sono 3 file, ogni file è un ZipEntry.

  3. Hai inserito zipEntry in ZipOutputStream

  4. Crea un buffer di byte in cui leggere i tuoi dati.
  5. Leggi dal tuo inputStream nel tuo buffer di byte e ricorda il conteggio.
  6. Mentre il conteggio non è -1, scrivi quel byte byffer sul tuo zipStream.
  7. Leggi la riga successiva.

Chiudi gli stream quando hai finito. Avvolgilo con un metodo come ritieni opportuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top