我正在爲Java中的項目創建文件寫入/讀取實用程序。我創建了一個封裝了特定文件的一般讀,寫等功能類的類。將使用此文件實用程序的類是多線程的。內部的I類具有用於FileWriter
(和FileReader
)對象的實例變量。它是在這個班的建設初始化。裏面每個寫作方法創建一個BufferedWriter
對象的新實例爲FileWriter
實例傳遞給。我有什麼理由不應該這樣做?是否有必要每個BufferedWriter
實例都需要一個獨特的FileWriter
實例?或者我能否在許多不同的BufferedWriter
實例中使用相同的FileWrite
實例?每個BufferedWriter實例只有一個FileWriter實例?
0
A
回答
1
我無法想象,爲什麼你認爲你需要這個,但你不知道。你應該做的是創建一個單BufferedWriter
圍繞FileWriter
,並有你的方法寫入,受當然同步。
BufferedWriters
多個問題之一是,如果你關閉它們中的任何一個,底層的FileWriter
也會被關閉。
0
使用的BufferedWriter的整點是緩衝數據,以儘量減少系統的呼叫的數量。這是出於提高效率的目的,但它通過將寫入延遲/批量寫入Writer中來實現。
總之,
- 它的目的是爲了提高性能
- 它,你寫它究竟是不是立即寫入,如果操作不當,從來沒有壞處。
創建多個BufferedWriters是你可以做的最糟糕的事情,因爲;
- 其創建成本很高,默認情況下緩衝區爲8 KB。經常這樣做會很容易,比根本沒有緩衝區更糟糕。
- 如果不刷新數據,緩衝什麼事情都可能會丟失,或者如果你有多個緩衝區一次,他們可以在任何順序書寫。這是破壞文件的好方法。同樣,你最好不要使用緩衝區,而不是這樣做。
一個作家(或任何類)不像你撒上的仙塵,使你的代碼更好。它有助於達到目的,只有在知道它有幫助時才應添加它。
相關問題
- 1. WCF每個實例
- 2. 實例化$。每個
- 3. 重新定義SomeClass#每個只有一個實例
- 4. 總計只有一個實例
- 5. 指定函數只有一個實例
- 6. 我有一個SCNScene實例。我如何提取每個SCNGeometry實例?
- 7. 排序多個實例的jQuery交互,每個實例具有唯一的ID
- 8. 節點溫斯頓實例化每個實例有一個名字
- 9. 每個實例只有一次PostSharp方面調用
- 10. 每個獨立任務的唯一實例TaskScheduler vs實例
- 11. 實例變量,受另一個實例
- 12. 是否每個上下文只對應一個活動實例
- 13. jQuery +如何只選擇每個元素的第一個實例?
- 14. 實例化每個TableViewCell
- 15. 在類中保存一個BufferedWriter實例。任何問題?
- 16. 從一個實例訪問實例變量到另一個實例
- 17. 一個類實例
- 18. VB.NET單個對象實例只有
- 19. 只能添加ScriptManager的一個實例
- 20. 簡單mod_rewrite的,在每一個實例
- 21. 每個gdb實例有可能有一個線程嗎?
- 22. 爲「只有一個實例」創建一個Python類?
- 23. ExecutorService - 在方法中創建新實例vs每個類創建一個實例
- 24. JAXB一個Marshaller實例和每個應用程序的Unmarshaller實例
- 25. 從一個實例到另一個實例的線
- 26. 一個實例影響另一個實例但它不應該
- 27. 添加一個實例到另一個實例的鏈表
- 28. SQLAlchemy - 在另一個實例中創建一個實例__init__
- 29. jquery只顯示/隱藏但只有一個實例
- 30. 每個openCV 3.1.0庫的三個實例
我看到了「需要」之所以這樣做是爲了減少重複的代碼量。 – user5553362
*什麼*重複代碼? 'bufferedWriter.write()?'事實是,你會*添加*重複的代碼,特別是'新的BufferedWriter(...)'無處不在。 – EJP