我正在爲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. 只有一個實例,當多個實例具有相同類別時,只能向下滑動一個實例
- 2. WCF單例服務:單實例每個?每個主機實例?
- 3. 實例化$。每個
- 4. WCF每個實例
- 5. 重新定義SomeClass#每個只有一個實例
- 6. 最快的方法來檢查每個實例只有一個?
- 7. 貨幣類別每個貨幣只有一個實例?
- 8. java如何確保每個JVM只有一個枚舉實例
- 9. 只有一個線程的實例
- 10. 指定函數只有一個實例
- 11. ProducerTemplate應該只有一個實例
- 12. 總計只有一個實例
- 13. 只有一個django模型的實例
- 14. 爲什麼只有一個HTTPClient實例?
- 15. 每個HttpContext實例一個對象
- 16. 節點溫斯頓實例化每個實例有一個名字
- 17. 排序多個實例的jQuery交互,每個實例具有唯一的ID
- 18. 我有一個SCNScene實例。我如何提取每個SCNGeometry實例?
- 19. 每個實例只有一次PostSharp方面調用
- 20. 爲什麼我每頁只能有一個Silverlight UserControl實例?
- 21. 每個獨立任務的唯一實例TaskScheduler vs實例
- 22. MATLAB:將一個實例從一個空實例實例化到一個'空白'實例
- 23. 在實體框架中實現「每個對象一個實例」
- 24. 實例變量,受另一個實例
- 25. Redactor一次只顯示一個實例
- 26. jQuery +如何只選擇每個元素的第一個實例?
- 27. 爲什麼每個事務只修改一個聚合實例?
- 28. 是否每個上下文只對應一個活動實例
- 29. 實例化每個TableViewCell
- 30. jQuery Cycle:多個實例,檢測每個實例的結尾
我看到了「需要」之所以這樣做是爲了減少重複的代碼量。 – user5553362
*什麼*重複代碼? 'bufferedWriter.write()?'事實是,你會*添加*重複的代碼,特別是'新的BufferedWriter(...)'無處不在。 – EJP