我正在为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