2015-05-01 16 views
3

我正在尋找理論分析。我的意思是,緩衝系統如何工作以及使用flush提供什麼優勢?如果可能,請舉例說明。對於printwriter對象,使用flush是什麼?

+1

這裏是一個有用的鏈接。 請訪問http://www.coderanch.com/t/522900/java/java/flush-Java –

+0

爲什麼你需要理論分析,只需看一看源代碼。這是一個更實際的問題。在兩種情況下,flush()僅適用於:如果要避開延遲原因的緩衝,或者想要對底層數據流執行任何操作,並且需要確保數據到達。 (通常只有在使用套接字或fsync時纔有效)。如果你確信你寫得更直接(即循環),你尤其不需要flush()。 – eckes

回答

5

當您寫入文本文件時,BufferedWriter不會立即將其寫入磁盤。相反,它將數據保存在內存中的緩衝區中。

這樣做的好處是許多小寫入將進入緩衝區,然後數據將一次寫入磁盤,即,用一個大寫,而不是很多小寫,這將是低效的。

當緩衝區已滿時,BufferedWriter將自行寫入數據,即。它將執行與緩衝區已滿時調用flush()相同的內容。

那麼你應該什麼時候手動撥打flush()

  • 當你需要的數據在磁盤上現在。如果您有一個程序在寫入數據的同時從磁盤上的文件中讀取數據,則可能需要確保所有應該在磁盤上的數據實際上是

  • 如果您通過網絡連接進行書寫,則可能需要撥打flush()以便數據通過網絡立即發送。

通常它是必要調用flush()。只需編寫並在完成時調用close(),並且不需要flush()作爲close()爲您刷新緩衝區。