收集垃圾时DataInputStream是否关闭包装的InputSream?

时间:2016-05-01 19:22:39

标签: java stream garbage-collection finalizer

考虑下面的Java代码:

void test(InputStream inputStream) {
    DataInputStream dataInputStream = new DataInputStream(inputStream);
    return;
}

test方法返回时,dataInputStream将(某些时候)被垃圾收集。 DataInputStream是否在其终结器中关闭内部流?

如果不这样做,我找不到任何明确的陈述。有关于行为的官方文件吗?如果有的话可以请你指点吗?

感谢。

编辑:我不是在问关闭DataInputStream是否也会关闭内部流。我问的是,如果我不关闭,外部流被垃圾收集,而内部仍然有引用,因此活着。

1 个答案:

答案 0 :(得分:1)

没有任何文档明确表示DataInputStream没有终结器,但您可以使用的类来填充书籍。由于finalize()方法的目的是释放资源而忘记释放已损坏的程序,因此只有承载资源的类可能具有这样的安全网。但是DataInputStream没有资源,因此,没有这样的finalize()方法。

它是可能拥有资源的基础InputStream,因此,只有当基础InputStream无法访问时,守护清理工具才能释放资源。当您仍然持有强烈的引用时,当您的控件之外的代码虚假地关闭InputStream时,可以肯定会将其视为破坏行为。