【问题标题】:Java Best Practices - Need to write to file constantly - BufferedWriter?Java 最佳实践 - 需要不断写入文件 - BufferedWriter?
【发布时间】:2014-03-09 03:58:32
【问题描述】:

所以我有一个 java 进程,它需要每 100 毫秒不断地在文件中追加一个新行。我目前为此使用 BufferedWriter,但根据我的阅读,BufferedWriter 对象在完成时应该始终是 .close()。

如果这样做,我将不得不每隔几毫秒创建一个新的 BufferedWriter 对象,这并不理想。创建一个静态 BufferedWriter 并在每次写入后对其进行 .flush() 处理有什么问题吗?

最后,如果性能是一个问题,BufferedWriter 是最好的类吗?有没有可行的替代方案?

谢谢!

【问题讨论】:

  • 在100 millisecond 间隔,有什么样的公差?

标签: java filestream bufferedwriter


【解决方案1】:

BufferedWriter 应该在它完成后关闭。如果您正在执行诸如日志记录之类的操作,则完全可以在负责日志记录的对象中保留一个打开的写入程序,然后在运行结束时(或每当您滚动到新的日志文件时)将其关闭。

您不应该做的是简单地打开编写器,然后丢弃引用而不关闭它;这可能会泄漏资源,并且在缓冲的情况下,可能会丢失输出的最后一部分。

【讨论】:

  • +1 使用 flush() 写出缓冲区以立即显示,仅在不再需要写入文件时使用 close()。
【解决方案2】:

创建一个静态 BufferedWriter 并在每次写入后仅 .flush() 处理它有什么问题吗?

一个长期存在的BufferedWriter 没有任何问题。事实上,这是一个好主意。 (您是否使用static 或其他是另一个问题……但该设计决策不会影响功能和性能。)

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

但无论哪种方式,您刷新的长寿命 BufferedWriter 可能比创建、写入和关闭大量 BufferedWriter 对象更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多