没有同花顺的关闭文件在哪里?

时间:2016-03-24 06:43:02

标签: java

我相信并在很多帖子中读到,在Java上,close方法可以在flush的任何JDK后代上调用OutputStream方法而无需先前的close调用。实际上我总是覆盖(当我需要时,很少见)flush在最终结束前调用close。我希望看到一些官方文档明确指出,可以在没有flush的情况下安全地致电alias rh='function _rh(){ sed -i '\''$d'\'' ~/.bash_history ; };_rh'

某些文件在哪里说这个?

2 个答案:

答案 0 :(得分:2)

非常好的问题! 是的,打电话给flush() 似乎

现在,关于OutputStream或其实现的各种接口(如Closeable)的Javadoc都没有提到关闭流之前调用flush()的任何内容。它已经很久了。

但是,如果您查看其他Writer类,例如BufferedWriterPrintWriter等,close()文档会明确说明流在关闭之前已刷新。这是因为它们都实现了Writer类,并且那里的文档指定了这种行为。

现在,你的猜测和我的一样好。但是,当我在关闭流之前没有刷新时,我从未遇到过任何问题。所以,我怀疑确实调用了flush(),这很可能是Flushable接口的结果。

我发现一个常见的特性是,如果一个类实现了Writer接口,那么文档总是提到 close()在首先调用flush()后关闭流的事实< / em>的

修改!!!

OutputStream是一个抽象类,我挖得更深一些。我发现FilterOutputStream恰好延伸OutputStream。来自source code for close()方法......

public void close() throws IOException {
    try {
            flush();
        } catch (IOException ignored) {

        }
        out.close();
    }
}

BufferedOutputStreamDataOutputStreamPrintStream扩展FilterOutputStream,因此继承了相同的close()方法。如果不是全部,至少,这些课程中的 close()会拨打flush()

答案 1 :(得分:0)

跟随@Debosmit Rays领导并检查了来源。

  • ByteArrayOutputStream不会关闭
  • FileOutputStream不会关闭
  • FilterOutputStream以关闭
  • 进行刷新
  • ObjectOutputStream以关闭
  • 进行刷新
  • PipedOutputStream不会关闭
  • org.omg.CORBA_2_3.portable.OutputStream不会关闭

只要扩展FilterOutputStream或ObjectOutputStream的类不覆盖close函数,FilterOutputStream的子类也应该刷新。