打开Java FileOutputStream是否有效?

时间:2014-01-10 19:40:36

标签: java filestream

我正在为我的程序编写一个单独的记录器,我想知道每次登录时打开和关闭它是否更好,或者在创建单例时打开流并关闭它终止该计划?如果我这样做,我会在终止时关闭它吗?

3 个答案:

答案 0 :(得分:1)

不要关闭它,只需刷新,这是Log4j FileAppender默认执行的操作。

答案 1 :(得分:1)

一次打开​​文件的主要优势效果。你可以节省每次调用open的惩罚,并寻找文件末尾的附加内容;如果文件很大(有些日志往往是),这会变得更糟。

缺点是:

  1. 如果作者中有一些缓冲(延迟写入),您可能无法立即读取最后一个日志行。但是,每次写入后都可以通过刷新来修复(你可能会失去一些性能,但这通常不相关)。

  2. 您不能同时写入来自不同进程的同一日志。但是你可能不需要这个 - 如果你需要它,开放式解决方案仍然需要处理并发性。

  3. 某些外部日志处理(通常是日志轮换并重命名)会出现问题。为此,您可能需要实现一些关闭并重新打开文件的信令。

  4. 通常,优势超过缺点,因此一般规则是保持日志文件处于打开状态。但这取决于情景。

    (正如其他答案所指出的那样,通常你更喜欢使用一些标准的日志记录库而不是自己实现它。但尝试一下,或者至少考虑所涉及的所有问题是有益的)。

答案 2 :(得分:0)

你应该打开一次(并关闭一次)。如果你什么都不做,Java会为你关闭它。您可能更愿意明确覆盖Object.finalize()