每个BufferedWriter实例只有一个FileWriter实例?

时间:2016-02-29 01:54:39

标签: java multithreading file io bufferedwriter

我正在为Java项目创建文件写入/读取实用程序。我创建了一个类,它封装了特定文件的一般读,写等类型的函数。将使用此文件实用程序的类是多线程的。在该类的内部,我有一个FileWriter(和FileReader)对象的实例变量。它在本课程的构建中初始化。在每个编写方法的内部,我创建了一个BufferedWriter对象的新实例来传递FileWriter实例。我有什么理由不这样做吗?每个BufferedWriter实例是否需要一个唯一的FileWriter实例?或者我能够在许多不同的FileWrite实例中使用相同的BufferedWriter实例吗?

2 个答案:

答案 0 :(得分:1)

我无法想象为什么你认为你需要这个,但你不是。您应该做的是在BufferedWriter周围创建一个 FileWriter,并让您的方法写入,当然需要同步。< / p>

多个BufferedWriters的众多问题之一是,如果您关闭其中任何一个,基础FileWriter也会关闭。

答案 1 :(得分:0)

使用BufferedWriter的重点是缓冲数据以最小化系统调用的数量。这样做是为了提高效率,但它的工作原理是将写入延迟/批处理到它包装的Writer中。

简而言之,

  • 它的目的是提高绩效
  • 它的缺点是你写的东西不是立即写的,如果做错了,永远不会。

创建多个BufferedWriters是你可以做的最糟糕的事情,因为;

  • 创建起来很昂贵,默认情况下缓冲区为8 KB。经常这样做,很容易比没有缓冲区更糟糕。
  • 如果您不刷新数据,则可能会丢失任何缓冲的内容,或者如果您同时拥有多个缓冲区,则可以按任何顺序编写它们。这是破坏文件的好方法。再说一遍,你最好不要使用缓冲区而不是这样做。

作家(或任何一类)不像你撒上的仙尘,使你的代码更好。它有一个目的,你应该只在你知道它有帮助时添加它。