Java 无冲洗关闭的文件在哪里

Java 无冲洗关闭的文件在哪里,java,Java,我相信并在许多帖子中读到,在Java上可以调用close方法,而无需对OutputStream的任何JDK后代调用flush。实际上,我总是在最后一次关闭之前覆盖(当我需要它时,这是罕见的)close调用flush。我希望看到一些官方文档,清楚地说明可以安全地调用close,而无需flush 哪里有这样的文档?问得好!是的,似乎要调用flush() 现在,与之相关的Javadoc或它实现的各种接口都没有提到在关闭流之前调用flush()。这样已经有很长时间了 但是,如果您查看其他Writer类,

我相信并在许多帖子中读到,在Java上可以调用
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
是抽象类;所以它显然没有实现。