Come si reindirizza un inputstream a un file zippato mentre viene letto con Java?
-
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.
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:
- Si crea ZipOutputStream, dandogli il file in cui si desidera scrivere.
-
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.
-
Hai inserito zipEntry in ZipOutputStream
- Crea un buffer di byte in cui leggere i tuoi dati.
- Leggi dal tuo inputStream nel tuo buffer di byte e ricorda il conteggio.
- Mentre il conteggio non è -1, scrivi quel byte byffer sul tuo zipStream.
- 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