2016-02-29 156 views
0

我正在爲Java中的項目創建文件寫入/讀取實用程序。我創建了一個封裝了特定文件的一般讀,寫等功能類的類。將使用此文件實用程序的類是多線程的。內部的I類具有用於FileWriter(和FileReader)對象的實例變量。它是在這個班的建設初始化。裏面每個寫作方法創建一個BufferedWriter對象的新實例爲FileWriter實例傳遞給。我有什麼理由不應該這樣做?是否有必要每個BufferedWriter實例都需要一個獨特的FileWriter實例?或者我能否在許多不同的BufferedWriter實例中使用相同的FileWrite實例?每個BufferedWriter實例只有一個FileWriter實例?

回答

1

我無法想象,爲什麼你認爲你需要這個,但你不知道。你應該做的是創建一個BufferedWriter圍繞FileWriter,並有你的方法寫入,受當然同步。

BufferedWriters多個問題之一是,如果你關閉它們中的任何一個,底層的FileWriter也會被關閉。

+0

我看到了「需要」之所以這樣做是爲了減少重複的代碼量。 – user5553362

+0

*什麼*重複代碼? 'bufferedWriter.write()?'事實是,你會*添加*重複的代碼,特別是'新的BufferedWriter(...)'無處不在。 – EJP

0

使用的BufferedWriter的整點是緩衝數據,以儘量減少系統的呼叫的數量。這是出於提高效率的目的,但它通過將寫入延遲/批量寫入Writer中來實現。

總之,

  • 它的目的是爲了提高性能
  • 它,你寫它究竟是不是立即寫入,如果操作不當,從來沒有壞處。

創建多個BufferedWriters是你可以做的最糟糕的事情,因爲;

  • 其創建成本很高,默認情況下緩衝區爲8 KB。經常這樣做會很容易,比根本沒有緩衝區更糟糕。
  • 如果不刷新數據,緩衝什麼事情都可能會丟失,或者如果你有多個緩衝區一次,他們可以在任何順序書寫。這是破壞文件的好方法。同樣,你最好不要使用緩衝區,而不是這樣做。

一個作家(或任何類)不像你撒上的仙塵,使你的代碼更好。它有助於達到目的,只有在知道它有幫助時才應添加它。