问题说明了一切。
不关闭各种字节流会带来什么后果?

始终要强调这样做,但是没有提及它是如何引起问题的。
有人可以解释一下实际情况吗?

最佳答案

这不仅是字节流。这涉及实现 Closeable 的任何事情。

如文档所述:

调用close方法以释放对象持有的资源(例如打开的文件)。

不管Closeable是否拥有系统资源,经验法则是:不要碰巧。正确地对其进行.close()编码,可以确保您释放了此类系统资源(如果有)。

典型的成语(请注意InputStream实现Closeable):

final InputStream in = whateverIsNeeded;
try {
    workWith(in);
} finally {
    in.close();
}

在Java 7中,您还拥有AutoCloseable(由Closeable实现)和try-with-resources语句,因此:
try (
    final InputStream in = whateverIsNeeded;
) {
    workWith(in);
}

这将为您处理in的关闭。

再说一遍:不要抓住机会。如果您不使用JDK 7但可以买得起Guava,请使用 Closer

10-08 18:38