莫等闲5
2015-03-31 13:40
采纳率: 100%
浏览 1.6k
已采纳

DataOutputStream类中的close方法

各位好,今天试用了一下,DataOutputStream类,当我使用后关闭DataOutputStream对象的时候,构造时传入的FileOutputStream流也被关闭了。文档里也是这么写的,但是我去查看源码时只发现了在FilterOutputStream类中的这么一小段:
public void close() throws IOException {
try (OutputStream ostream = out) {
flush();
}
}
到底DataOutputStream类中的close方法是否关闭了构造时传入的FileOutputStream流?
查1.6源码的时候是有关闭的,但查1.8源码的时候却没有关闭的那一段代码,很奇怪。如果是关闭了,这段源码怎么解释?在jdk包中的不全?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • zfpigpig 2020-04-29 17:46
    已采纳

    你看的src.zip里面的源码吧~ 里面关于FilterOutputStream的源码是错误的。反编译以后应该是这样的
    public void close()
    throws IOException
    {
    OutputStream localOutputStream = this.out;
    Object localObject1 = null;
    try
    {
    flush();
    }
    catch (Throwable localThrowable2)
    {
    localObject1 = localThrowable2;
    throw localThrowable2;
    }
    finally
    {
    if (localOutputStream != null) {
    if (localObject1 != null) {
    try
    {
    localOutputStream.close();
    }
    catch (Throwable localThrowable3)
    {
    ((Throwable)localObject1).addSuppressed(localThrowable3);
    }
    } else {
    localOutputStream.close();
    }
    }
    }
    }
    是正常关闭的

    打赏 评论

相关推荐 更多相似问题