Java最佳实践 - 需要不断写入文件 - BufferedWriter?

时间:2014-03-09 03:58:32

标签: java filestream bufferedwriter

所以我有一个java进程需要每隔100毫秒不断地向文件追加一个新行。我目前正在使用BufferedWriter,但从我读过的内容来看,BufferedWriter对象在完成时应始终为.close()。

如果我这样做,我将不得不每隔几毫秒创建一个新的BufferedWriter对象,这是不理想的。创建一个静态BufferedWriter是否有任何问题,每次写入后只需.flush()'?

最后,如果性能受到关注,BufferedWriter是最适合使用的类吗?有没有可行的替代方案?

谢谢!

2 个答案:

答案 0 :(得分:5)

完成时应关闭BufferedWriter。如果您正在执行类似日志记录的操作,那么在负责日志记录的对象中保留一个打开的编写器,然后在运行结束时(或者每当您翻转到新的日志文件时)将其关闭都是完全可以接受的。

你不应该做的只是打开作者,然后丢弃参考而不关闭它;这可能会泄漏资源,并且在缓冲的情况下,可能会丢失输出的最后部分。

答案 1 :(得分:1)

  

创建一个静态BufferedWriter是否有任何问题,每次写入后只需.flush()?

一个长寿的BufferedWriter没有任何问题。实际上这是个好主意。 (无论您使用static还是其他内容都是一个不同的问题......但该设计决策不会影响功能和性能。)

从性能角度来看,每次写入后调用flush都更有问题。这将导致您的应用程序进行大量write系统调用...这很昂贵。如果您需要立即编写 的日志记录,我只会这样做。或者它可以在计时器上刷新......或者根本不刷新,并依靠BufferedWriter的(最终)关闭来刷新任何未完成的数据。

但不管怎样,你刷新的长期BufferedWriter可能比创建,编写和关闭大量BufferedWriter个对象更好。