2012-02-14 33 views

回答

26

平齊()寫入緩衝器向目的地的內容,並且使緩衝器空用於進一步的數據存儲,但它不會永久關閉該流。這意味着您仍然可以向流中寫入更多數據。

但是close()會永久關閉流。如果您想進一步寫入一些數據,則必須重新打開該數據流並將數據添加到現有數據中。

+0

當使用BufferedWriter(或BufferedReader)時,我們不必擔心flush() - BufferedWriter在內部刷新,而「write()」在緩衝區已滿時刷新。 – enator 2017-10-26 13:12:51

+1

但最後__如果緩衝區既不是空的,也不是full__,並且我們想把最後一部分寫入磁盤(這幾乎總是需要的),__我們必須明確/手動地清空(flush)它,這是非常必要的。 – FaithReaper 2018-01-22 14:43:13

42

flush()只是可以確保任何緩衝的數據寫入到磁盤(在這種情況下 - 更普遍,通過任何IO通道你使用刷新)。之後您仍然可以寫入流(或作者)。

close()刷新數據並指示沒有任何數據。它關閉任何文件句柄,套接字或其他。您無法再寫入流(或作者)。

注意,如果沒有調用flush()數據可以仍然被寫入有關的IO通道 - 它只是一些數據可能進行緩衝。

close()一般要求flush()爲好,但它最近已經向我指出,在一些JDK的實現,通過沖洗截至收盤一部分拋出的異常吞下:(

+0

flush()就夠了嗎?或者我們應該在沖洗後致電關閉? 如果我想調用flush flush – VedX 2017-07-25 14:00:15

+1

@TmP:那麼你應該在*某個*點調用'close'。 – 2017-07-25 15:33:04

+0

謝謝Sir @Jon Skeet – VedX 2017-07-26 03:09:28

3

flush()刷新緩衝區的內容到目的地。你可以再次寫東西到流close()刷新內容到目的地,並關閉該流close()後,你可以不寫什麼了

+1

Jon Skeet在15秒前寫道)) – shift66 2012-02-14 06:26:31

2

flush():。要刷新輸出流,使用void flush()實現方法具d的DataOutputStream類。此方法內部調用flush()基礎OutputStream類的方法,該方法強制將任何緩衝的輸出字節寫入流中。

close():它通常關閉Stream,connection,socket。

參見flush and close example

+0

但是,當它遇到有一些數據要寫入文件時,它會立即刷新文件中的數據或內容嗎? – mum 2012-02-14 06:41:48

+0

不,它不會立即刷新數據。它會強制輸出字節在數據流中寫入數據。當您調用close方法時,它會使數據變滿並指示沒有更多數據。 – Suresh 2012-02-14 06:47:10

相關問題