我相信并看到很多帖子中说,在Java中,可以在任何OutputStream
的JDK派生类上调用close
方法而不需要先调用flush
。实际上,当我需要时(这很少见),我总是重写close
以在最终关闭之前调用flush
。我希望能够看到一些官方文档清楚地说明可以安全地调用close
而无需flush
。
哪里有这样的文件说明?
我相信并看到很多帖子中说,在Java中,可以在任何OutputStream
的JDK派生类上调用close
方法而不需要先调用flush
。实际上,当我需要时(这很少见),我总是重写close
以在最终关闭之前调用flush
。我希望能够看到一些官方文档清楚地说明可以安全地调用close
而无需flush
。
哪里有这样的文件说明?
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}
}
BufferedOutputStream,DataOutputStream
和PrintStream
扩展了FilterOutputStream
,因此继承了相同的close()
方法。如果不是全部,至少这些类中的close()
方法会调用flush()
。
跟随@Debosmit Rays的步伐并检查源代码。
只要扩展FilterOutputStream或ObjectOutputStream的类没有覆盖close函数,FilterOutputStream的子类也应该刷新。
FilterOutputStream
在 close
方法中确实会执行 flush 操作。OutputStream
是一个抽象类,显然不会有具体的实现。 - Debosmit Ray