Java 无冲洗关闭的文件在哪里
我相信并在许多帖子中读到,在Java上可以调用Java 无冲洗关闭的文件在哪里,java,Java,我相信并在许多帖子中读到,在Java上可以调用close方法,而无需对OutputStream的任何JDK后代调用flush。实际上,我总是在最后一次关闭之前覆盖(当我需要它时,这是罕见的)close调用flush。我希望看到一些官方文档,清楚地说明可以安全地调用close,而无需flush 哪里有这样的文档?问得好!是的,似乎要调用flush() 现在,与之相关的Javadoc或它实现的各种接口都没有提到在关闭流之前调用flush()。这样已经有很长时间了 但是,如果您查看其他Writer类,
close
方法,而无需对OutputStream
的任何JDK后代调用flush
。实际上,我总是在最后一次关闭之前覆盖(当我需要它时,这是罕见的)close
调用flush
。我希望看到一些官方文档,清楚地说明可以安全地调用close
,而无需flush
哪里有这样的文档?问得好!是的,似乎要调用flush()
现在,与之相关的Javadoc或它实现的各种接口都没有提到在关闭流之前调用flush()
。这样已经有很长时间了
但是,如果您查看其他Writer
类,例如,close()
文档特别声明流在关闭之前已刷新。这是因为它们都实现了这个类,并且文档指定了这个行为
现在,你的猜测和我的一样好。但是,当我在关闭一条流之前没有冲水时,我从来没有遇到过任何问题。因此,我怀疑确实调用了flush()
,这很可能是Flushable
接口的结果
我发现的一个共同特点是,如果类实现了Writer
接口,文档总是提到这样一个事实,即close()
在首先调用flush()
之后关闭流
编辑强>
OutputStream
作为一个抽象类,我挖掘得更深一些。我发现它恰好扩展了OutputStream
。从for的close()
方法中
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}
}
,
DataOutputStream
,PrintStream
扩展FilterOutputStream
,因此,继承相同的close()
方法。如果不是全部,至少这些类中的close()
确实调用了flush()
跟踪@Debosmit Rays lead并检查了源代码
- ByteArrayOutputStream未在关闭时冲洗
- FileOutputStream在关闭时不刷新
- FilterOutputStream确实在关闭时刷新
- ObjectOutputStream确实在关闭时刷新
- PipedOutStream在关闭时不刷新
- org.omg.CORBA_2_3.portable.OutputStream不会在关闭时刷新
只要扩展FilterOutputStream或ObjectOutputStream的类不重写close函数,FilterOutputStream的子类也应该刷新。这可能会有所帮助,但我确实看到很多关于这个问题的混淆,没有统一的答案:有些人似乎指定了这一点,例如,也有相反的例子:我编辑了我的answer@Fakenick实际上,FilterOutputStream在其
close()
函数中调用了flush()
。奇怪的是,为什么文档没有提到这一点。@epoch您能验证一下我写的内容是否正确吗?有几个问题FilterOutputStream
在close方法中进行刷新OutputStream
是抽象类;所以它显然没有实现。