当我完成它时,我还应该刷新()一个流,还是足够接近()?

时间:2014-04-11 21:20:09

标签: java io

在我使用BufferedWriter完成后,我知道我应该调用writer.close()。但我还应该致电writer.flush()吗?还是没必要?

另外,如果我在包含流实例化和IO代码的try块内部执行此操作,还是在其外部?

3 个答案:

答案 0 :(得分:3)

关闭会自动刷新你的流,所以你不必在关闭时刷新流。当您正在写入流并希望将中间值推送到文件/输出流时,Flush非常有用,这样如果程序崩溃,数据就不会丢失。

从Java 7及更高版本开始,您可以使用try-with-resources来避免编写用于清理流的清理代码。

  

try-with-resources语句是一个声明一个或多个资源的try语句。资源是在程序完成后必须关闭的对象。 try-with-resources语句确保在语句结束时关闭每个资源。

答案 1 :(得分:2)

根据我的经验,只有当您需要/需要确保必须在流中写入当前数据时,才应调用flush。使用小文件时,您只需直接调用close,因为在写入之前已经触发了文件流上的刷新。但是当你处理更大的文件时,例如一个拥有100万行或更多行的文件,那么不时更好地调用flush(例如在写入10k行之后),以便写入磁盘并简化flush调用{ {1}}。这可以在程序崩溃的情况下完成。

答案 2 :(得分:1)

方法close()将调用(f)flush()自动