我应该关闭字符串阅读器吗?

2022-09-01 23:38:40

我使用 a 将字符串转换为可以上传到 SFTP 服务器的内容(它需要流)。事后关闭它有什么意义吗?据我所知,在源代码中,它只是将字符串设置为...StringReaderStringReadernull

我可以这样做,但是由于 close 方法被标记为抛出一个,我只需要把它包装在一个 try catch 中,代码最终看起来比它可能需要的要可怕得多。IOException


答案 1

如果你知道你正在处理一个你将要扔掉的东西,我看不出有任何理由关闭它。我无法想象在关闭它之后,你有什么理由持有对它的引用,所以将字符串设置为垃圾回收没有真正的好处。如果您正在创建一个采用 的方法,那么关闭它可能是有意义的,因为您不知道基础类型。StringReadernullReader


答案 2

它的作用远不止于此。如果我可以引用JavaDoc的话:

/**
 * Closes the stream and releases any system resources associated with
 * it. Once the stream has been closed, further read(),
 * ready(), mark(), or reset() invocations will throw an IOException.
 * Closing a previously closed stream has no effect.
 */

所以,是的,你应该关闭那个读者。不是为了资源,而是为了好的风格和可能跟随你的程序员。您不知道此实例将传递到何处,以及其他人将尝试使用它做什么。有朝一日,您可能还会选择更改接口并接受任何 Reader 实现,在这种情况下,您可能会处理需要调用 close() 以释放资源的 Reader。

因此,一旦你完成了它,防止进一步(可能错误)使用此实例是很好的风格。由于它不会造成伤害,因此它只会防止将来可能出现的错误。

编辑:既然你说,你的close()方法声明了一个异常,它可能会引发,我会说你需要调用close(),因为StringReader.close()不会引发异常。但是,Reader.close() 确实如此。因此,您已经允许 Reader 的其他实现,因此必须关闭它,因为您无法知道最终会获得哪些 Reader 实现。如果我们谈论的是三行永远不会离开该范围的代码,请声明您的变量 StringReader 并调用 close(在这种情况下,没有异常处理)。


推荐