我读了这个问题Using flush() before close(),接受的答案是这只意味着你遵循这个模式。
就像BufferedWriter#close()或FilterOutputStream.#close()一样,如果所有缓冲的Stream / Writer在我们调用flush()
时调用其close()
,并且如果我们(开发者和开发人员)将审查代码)所有人都知道,我们真的还需要这个吗?如果是,那将是什么原因?
答案 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(),那将无关紧要。