【发布时间】:2016-05-01 19:22:39
【问题描述】:
考虑下面的Java代码:
void test(InputStream inputStream) {
DataInputStream dataInputStream = new DataInputStream(inputStream);
return;
}
当test 方法返回时,dataInputStream 将(有时)被垃圾回收。 DataInputStream 是否在其终结器中关闭内部流?
我没有找到任何明确的声明,无论是否。有没有关于行为的官方文档?有的话可以指点一下吗?
谢谢。
编辑:我不是在问关闭 DataInputStream 是否也关闭了内部流。我在问如果我不关闭并且外部流被垃圾收集而内部仍然有对它的引用因此是活着的。
【问题讨论】:
-
@tunaki OP 询问是否会因为 GC 终结器而在没有明确关闭调用的情况下关闭流 - 答案是否定的,因为没有这样的终结器
-
@wero 是的,我就是这么问的。 “没有这样的终结器”是否记录在某个地方?它是特定于实现的还是规范强制的?有链接吗?谢谢。
-
@Volkan 只需查看
DataInputStream的源并向上处理层次结构 - 没有终结器。java.io中唯一带有终结器的类是FileInputStream和FileOutputStream。不知道那是不是任何地方的文件。
标签: java stream garbage-collection finalizer