不关闭字节流的后果

Cry*_*eth 4 java byte stream

这个问题说明了一切。 不关闭各个字节流会有什么后果呢?

非常强调始终这样做,但没有提及它如何导致问题。有人可以解释一下到底发生了什么吗?

fge*_*fge 5

这不仅仅是字节流。这涉及到任何实施Closeable.

正如文档所述:

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

无论 a 是否Closeable拥有系统资源,经验法则是:不要冒险.close()正确地执行此操作,您将确保释放此类系统资源(如果有)。

典型的习惯用法(注意InputStreamimplements Closeable):

final InputStream in = whateverIsNeeded;
try {
    workWith(in);
} finally {
    in.close();
}
Run Code Online (Sandbox Code Playgroud)

在 Java 7 中,您还拥有AutoCloseable(它Closeable实现了)和 try-with-resources 语句,因此:

try (
    final InputStream in = whateverIsNeeded;
) {
    workWith(in);
}
Run Code Online (Sandbox Code Playgroud)

in这将为您处理关闭。

再次强调:不要冒险。如果您不使用 JDK 7 但可以负担得起 Guava,请使用Closer.