La chiusura zos
chiude automaticamente bos
e fos
oppure devo chiuderli manualmente?La chiusura di uno stream nidificato chiude anche i flussi principali?
risposta
Sì, lo fa. La sua Javadoc dice:
Chiude il flusso di output ZIP, così come il flusso di essere filtrato.
Inoltre, il Javadoc for BufferedOutputStream
dice:
chiude questo flusso di output e rilascia tutte le risorse di sistema associate al flusso.
Procedimento
FilterOutputStream
close
chiama il suo metodoflush
, e poi chiama il suo metodo di flusso di uscita sottostanteclose
.
Quindi, quando si chiude il ZipOutputStream
, si chiuderà il tuo BufferedOutputStream
, che a sua volta chiudere il FileOutputStream
.
Sì.
ZipOutputStream.close()
metodo è specificato da Closeable.close()
cui:
Chiude questo flusso e rilascia tutte le risorse di sistema associati esso.
Lo stesso vale per BufferedOutputStream.close()
, un metodo ereditato da FilterOutputStream
.
La chiusura del flusso del wrapper chiude automaticamente il flusso interno.
Quindi, nel tuo caso, devi solo chiudere ZipOutputStream
. Chiudere un flusso due volte non genera un'eccezione, quindi chiudere di nuovo un flusso interno (anche se non necessario) funziona altrettanto bene.
Ecco cosa succede quando si istanzia un ZipOutputStream
public ZipOutputStream(OutputStream out) {
this.out = out; // BufferedOutputStream reference saved
}
Ecco l'attuazione ZipOutputStream.close()
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close(); // BufferedOutputStream being closed
}
Analogamente, BufferedOutputStream
chiude automaticamente il FileOutputStream
attraverso la sua ereditato FilterOutputStream#close()
che è stato implementato come:
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close(); // FileOutputStream being closed
}
Sì, sì. ma stranamente quando stavo eseguendo la scansione di fortificazione con find find abilitato cattura tutti questi tipi di stream avvolti e non chiusi come elementi ad alta priorità da correggere.Non sei sicuro del motivo per cui lo fanno
- 1. Lettore nidificato di chiusura
- 2. FileStreamResult chiude Stream?
- 3. Lo streamreader di smaltimento chiude lo stream?
- 4. È necessario chiudere i flussi di input/output creati dai flussi IO di un socket quando si chiude il socket?
- 5. C# utilizzando i flussi
- 6. Perché la chiusura di una finestra di dialogo figlio nidificata chiude anche la finestra di dialogo principale?
- 7. Come si fermano i flussi?
- 8. Posso demultiplex i flussi?
- 9. Errore di chiusura nidificato in C#?
- 10. Flussi alternativi basati su condizioni per stream akka
- 11. Che cos'è uno stream?
- 12. Generazione di un breve [] utilizzando i flussi
- 13. Decisione tra l'uso di uno stream o di un loop
- 14. Chrome Extension: chiude la pagina di sfondo dopo la chiusura di Chrome
- 15. Qt auto chiude i file?
- 16. Stream vs monadi
- 17. Differenza tra flussi java 8 e flussi paralleli
- 18. dati principali di accesso in un nidificato ripetitore fortemente tipizzato
- 19. Quando viene valutata la testa di uno stream?
- 20. Nidificato anche se in Crystal Reports
- 21. Come devo sommare qualcosa con i flussi?
- 22. App di chiusura pulsante posteriore anche quando si utilizza FragmentTransaction.addToBackStack()
- 23. Riproduzione di uno stream ogg in iOS
- 24. Il cassetto di navigazione si chiude anche se si sovrascrive suBackPressato()
- 25. pdftk non decomprime i flussi di dati
- 26. Quanto sono vicini i flussi di input Java?
- 27. Chi dovrebbe essere responsabile della chiusura di un flusso
- 28. Casi di utilizzo per i flussi reattivi utilizzando i flussi 9 di Java in Servlet?
- 29. Come determinare il motivo per cui uno stream CUDA sta bloccando
- 30. Chiusura di uno scanner genera java.util.NoSuchElementException
Devi anche fare attenzione a * sempre * chiudere il flusso più esterno; in caso contrario si potrebbero verificare perdite di dati dovute a buffer non scaricati nei flussi di wrapper che hanno chiuso il flusso avvolto sotto il loro naso. –