我们真的需要在今天关闭()之前调用flush()吗?

时间:2014-11-11 13:17:17

标签: java io bufferedwriter writer steam

我读了这个问题Using flush() before close(),接受的答案是这只意味着你遵循这个模式。

就像BufferedWriter#close()FilterOutputStream.#close()一样,如果所有缓冲的Stream / Writer在我们调用flush()时调用其close(),并且如果我们(开发者和开发人员)将审查代码)所有人都知道,我们真的还需要这个吗?如果是,那将是什么原因?

2 个答案:

答案 0 :(得分:3)

正如javadoc所说,你不需要来冲洗自己。 但是,考虑到你的读者和常识,它仍然是好事。

很少有专家知道javadoc。 我不确定是否会在没有查找的情况下刷新流, 而且我可能并不孤单。 看到明确的flush()电话,这一点非常清楚, 因此使代码更容易阅读。

此外,方法名称close()不代表冲洗。 它来自Closeable界面, 当然,它没有提及冲洗。 如果在关闭之前没有刷新缓冲的输出流, 尽管想要冲洗它, 你会依赖可能会或可能不是真的假设。 这会削弱你的实施。

你做出的任何假设, 你应该以某种方式传递给未来的维护者。 一种方法是留下评论:

// no need to flush() manually, close() will do it automatically

如果你不发表评论, 未来的维护者也可能要查找javadoc, 如果像我一样他们没有记住它。 但是,为什么你会写这样的评论,当你现在自己调用它并且用它完成时更容易也更好。

简而言之,在关闭之前先冲洗只是遵循良好的逻辑。 无需假设和猜测, 并且无需让读者思考。

答案 1 :(得分:-1)

对于输出,重要的是我们调用flush()和close(),因为缓冲的数据可能会丢失,如第一个答案here所述。如果你的节目输出很小,你的作家很快就会完成,那么根据我的经验,它不会给close()和flush()带来太大的影响。

对于输入,如果我们在系统退出之前不调用close(),那将无关紧要。