【发布时间】:2014-05-26 05:03:26
【问题描述】:
使用完 BufferedWriter 后,我知道我应该致电 writer.close()。但是我也应该打电话给writer.flush()吗?还是没必要?
另外,如果我在包含流和 IO 代码的实例化的 try 块内或在它之外执行此操作,这有关系吗?
【问题讨论】:
-
@BackSlash 你说得对,我是说作家。
使用完 BufferedWriter 后,我知道我应该致电 writer.close()。但是我也应该打电话给writer.flush()吗?还是没必要?
另外,如果我在包含流和 IO 代码的实例化的 try 块内或在它之外执行此操作,这有关系吗?
【问题讨论】:
关闭将自动刷新您的流,因此您不必在关闭时刷新流。当您正在写入流并希望将中间值推送到文件/输出流时,刷新很有用,这样如果程序崩溃,数据也不会丢失。
从 Java 7 及更高版本开始,您可以使用 try-with-resources 来避免编写清理代码来清理流。
try-with-resources 语句是声明一个或多个资源的 try 语句。资源是程序完成后必须关闭的对象。 try-with-resources 语句确保每个资源在语句结束时关闭。
【讨论】:
try 块内部或外部调用 writer/reader.close() 是否重要?
根据我的经验,只有当您想要/需要确保当前数据必须写入流时,您才应该调用flush。当您使用小文件时,您只需直接调用close,因为这已经在写入文件流之前触发了刷新。但是当您使用更大的文件时,例如一个有 100 万行或更多行的文件,那么最好不时调用flush(例如在写入 10k 行之后),以便写入磁盘并简化由close 调用的最终flush。这可以在程序崩溃的情况下完成。
【讨论】:
方法 close() 将自动调用 (f)flush()
【讨论】: