0

有什么理由在 StreamWriter 类上调用 close 方法吗?为什么我必须这样做?如果我不关闭 StreamWriter 我会得到某种未定义的行为吗?

4

3 回答 3

8

假设您正在谈论java.io.OutputStreamWriter,是的,当您不想再写任何内容时,您应该在 finally 块中关闭它。这允许关闭底层的 OutputStream。如果底层的OutputStream是一个FileOutputStream,它将释放文件描述符(这是一个有限的OS资源),并允许其他aps读取文件。如果它是一个 SocketOutputSTream,它将向另一方发出信号,表明它不应该期望来自套接字输入流的更多内容。

通常,流和读取器/写入器必须始终正确关闭。如果使用 Java 7,请使用新的 try-with-resources 构造来确保它会自动为您完成。

于 2012-07-01T16:50:21.173 回答
3

操作系统管理文件,如果在 java 中文件没有关闭,系统范围的资源就会丢失。

但是,在 java 7 中,您可以使用

try (OutputStreamWriter outWriter = new OuputStreamWriter(outStream, "UTF-8")) {
   ...
}

没有close。(输出流和编写器实现Closeable)。

顺便说一句,@PriestVallon 只是想让你把你的问题表述得更好/更有吸引力。如您所见,对此的“轻”反应可能会被误解。

于 2012-07-01T16:47:44.873 回答
1

写入和读取流经常涉及到操作系统资源的使用,如套接字、文件句柄等。如果你在流上写入,你也应该关闭它,我是为了释放你可能获得的资源(这取决于您在流下方使用的实际资源)。有时关闭流写入器涉及释放资源的独占分配,或将临时数据刷新到流中。有时关闭是无效的,这取决于您拥有的流类型,但接口必须处理所有必须关闭流的情况。

于 2012-07-01T16:48:46.537 回答