所以我有一个java进程需要每隔100毫秒不断地向文件追加一个新行。我目前正在使用BufferedWriter,但从我读过的内容来看,BufferedWriter对象在完成时应始终为.close()。
如果我这样做,我将不得不每隔几毫秒创建一个新的BufferedWriter对象,这是不理想的。创建一个静态BufferedWriter是否有任何问题,每次写入后只需.flush()'?
最后,如果性能受到关注,BufferedWriter是最适合使用的类吗?有没有可行的替代方案?
谢谢!
答案 0 :(得分:5)
完成时应关闭BufferedWriter
。如果您正在执行类似日志记录的操作,那么在负责日志记录的对象中保留一个打开的编写器,然后在运行结束时(或者每当您翻转到新的日志文件时)将其关闭都是完全可以接受的。
你不应该做的只是打开作者,然后丢弃参考而不关闭它;这可能会泄漏资源,并且在缓冲的情况下,可能会丢失输出的最后部分。
答案 1 :(得分:1)
创建一个静态BufferedWriter是否有任何问题,每次写入后只需.flush()?
一个长寿的BufferedWriter
没有任何问题。实际上这是个好主意。 (无论您使用static
还是其他内容都是一个不同的问题......但该设计决策不会影响功能和性能。)
从性能角度来看,每次写入后调用flush都更有问题。这将导致您的应用程序进行大量write
系统调用...这很昂贵。如果您需要立即编写 的日志记录,我只会这样做。或者它可以在计时器上刷新......或者根本不刷新,并依靠BufferedWriter
的(最终)关闭来刷新任何未完成的数据。
但不管怎样,你刷新的长期BufferedWriter
可能比创建,编写和关闭大量BufferedWriter
个对象更好。