2016-02-29 158 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。经常这样做会很容易,比根本没有缓冲区更糟糕。
  • 如果不刷新数据,缓冲什么事情都可能会丢失,或者如果你有多个缓冲区一次,他们可以在任何顺序书写。这是破坏文件的好方法。同样,你最好不要使用缓冲区,而不是这样做。

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