2012-02-14 9 views

risposta

26

flush() scrive il contenuto del buffer alla destinazione e rende il buffer vuoto per ulteriori dati da salvare ma non chiude il flusso in modo permanente. Ciò significa che puoi ancora scrivere altri dati nello stream.

Ma close() chiude il flusso in modo permanente. Se si desidera scrivere ulteriormente alcuni dati, è necessario riaprire nuovamente lo stream e aggiungere i dati a quelli esistenti.

+0

Quando si utilizza BufferedWriter (o BufferedReader) non ci si deve preoccupare di flush() - BufferedWriter esegue il flush internamente mentre "write()" ogni volta che il buffer è pieno. – enator

+1

Ma alla fine __se il buffer non è vuoto né pieno__, e vogliamo scrivere quella parte finale nel disco (che è quasi sempre desiderato), __avremo a 'flush()' esplicitamente/manualmente__, che è molto necessario . – FaithReaper

42

flush()solo fa in modo che tutti i dati buffer vengono scritti sul disco (in questo caso - più in generale, arrossato attraverso qualsiasi canale di IO che si sta utilizzando). Puoi ancora scrivere allo stream (o al writer) in seguito.

close() svuota i dati e indica che non ci sono altri dati. Chiude qualsiasi handle di file, socket o qualsiasi altra cosa. Non è più possibile scrivere nello stream (o nello scrittore).

Nota che senza le chiamate ai dati flush()possono ancora essere scritta al canale IO in questione - è solo che alcuni dati potrebbero essere tamponata.

close() chiama generalmente flush() pure, ma è stato di recente mi ha fatto notare che in alcune implementazioni JDK, eventuali eccezioni sollevate da vampate di calore come parte della chiusura di ingestione :(

+0

flush() è sufficiente? o dovremmo chiamare da vicino dopo il colore? Se voglio chiamare flush – VedX

+1

@TmP: beh dovresti chiamare 'close' at * some * point. –

+0

Grazie a te @Jon Skeet – VedX

3

flush() vampate contenuto del buffer di destinazione. e si può scrivere qualcosa di nuovo nel flusso close() vampate di contenuti di destinazione e chiude il flusso Dopo close() non si può scrivere più niente

+1

Jon Skeet ha scritto 15 secondi prima)) – shift66

2

flush():... per lavare flusso di uscita, utilizzare void flush() metho d della classe DataOutputStream. Questo metodo chiama internamente il metodo flush() della classe sottostante OutputStream che forza la scrittura di tutti i byte di output bufferizzati nello stream.

close(): In genere chiude Stream, connessione, socket.

Vedi flush and close example

+0

Ma scaricherà immediatamente i dati o il contenuto nel file ogni volta che incontra ci sono dei dati da scrivere nel file? – mum

+0

No, non scarica immediatamente i dati. Forza i byte di output per scrivere i dati in streaming. Quando si chiama il metodo close, si ottengono dati e si indica che non ci sono altri dati. – Suresh

Problemi correlati