Java 回收垃圾时,DataInputStream是否关闭包装的InputsReal?

Java 回收垃圾时,DataInputStream是否关闭包装的InputsReal?,java,stream,garbage-collection,finalizer,Java,Stream,Garbage Collection,Finalizer,考虑以下Java代码: void test(InputStream inputStream) { DataInputStream dataInputStream = new DataInputStream(inputStream); return; } 当test方法返回时,dataInputStream(有时)将被垃圾收集。DataInputStream是否在其终结器中关闭内部流 我找不到任何明确的陈述,如果它有或没有。是否有任何关于行为的官方文件?如果有,请你指出一点好吗

考虑以下Java代码:

void test(InputStream inputStream) {
    DataInputStream dataInputStream = new DataInputStream(inputStream);
    return;
}
test
方法返回时,dataInputStream(有时)将被垃圾收集。DataInputStream是否在其终结器中关闭内部流

我找不到任何明确的陈述,如果它有或没有。是否有任何关于行为的官方文件?如果有,请你指出一点好吗

谢谢


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

没有文档明确说明,
DataInputStream
没有终结器,但是你可以用类没有做的事情填充书籍。由于
finalize()
方法的目的是释放一个坏程序忘记释放的资源,因此只有承载资源的类才可能有这样的安全网。但是
DataInputStream
不包含资源,因此没有这样的
finalize()
方法


底层的
InputStream
可能会保存资源,因此,只有当底层的
InputStream
变得不可访问时,保护清洁器才可以释放资源。当您仍然持有对输入流的强引用时,您无法控制的代码错误地关闭了您的输入流时,这肯定会被视为破坏行为。

@tunaki OP询问流是否会因为GC终结器而在没有显式关闭调用的情况下关闭-答案是否,既然没有这样的finalizer@wero是的,我就是这么问的。是否在某些地方记录了“没有这样的终结器”?它是特定于实现的还是规范强制的?有链接吗?谢谢。@Volkan只需查看
DataInputStream
的源代码,就可以建立层次结构-没有终结器。
java.io
中唯一具有终结器的类是
FileInputStream
FileOutputStream
。不知道那是不是文件。