考虑下面的Java代码:
void test(InputStream inputStream) {
DataInputStream dataInputStream = new DataInputStream(inputStream);
return;
}
当test
方法返回时,dataInputStream将(某些时候)被垃圾收集。 DataInputStream是否在其终结器中关闭内部流?
如果不这样做,我找不到任何明确的陈述。有关于行为的官方文件吗?如果有的话可以请你指点吗?
感谢。
编辑:我不是在问关闭DataInputStream是否也会关闭内部流。我问的是,如果我不关闭,外部流被垃圾收集,而内部仍然有引用,因此活着。
答案 0 :(得分:1)
没有任何文档明确表示DataInputStream
没有终结器,但您可以使用不的类来填充书籍。由于finalize()
方法的目的是释放资源而忘记释放已损坏的程序,因此只有承载资源的类可能具有这样的安全网。但是DataInputStream
没有资源,因此,没有这样的finalize()
方法。
它是可能拥有资源的基础InputStream
,因此,只有当基础InputStream
无法访问时,守护清理工具才能释放资源。当您仍然持有强烈的引用时,当您的控件之外的代码虚假地关闭InputStream
时,可以肯定会将其视为破坏行为。