Svi*_*ish 19 java stringreader
我使用a StringReader将字符串转换为可以上传到SFTP服务器的字符串(它需要一个流).StringReader事后关闭是否有任何意义?据我所知,它只是将字符串设置为null......
我可以做到这一点,但是因为close方法被标记为抛出一个IOException而且我必须将它包装在try catch中并且代码最终看起来比它可能需要的更加可怕.
Whi*_*g34 13
如果你知道你正在处理StringReader你将丢弃的东西,我认为没有理由关闭它.在你关闭它之后我无法想象你有任何理由持有它的引用,所以对于null为垃圾收集设置的字符串没有任何实际好处.如果你正在创建一个接受a的方法,Reader那么关闭它可能是有意义的,因为你不知道底层类型.
它的作用不止于此。如果我可以引用 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.
*/
Run Code Online (Sandbox Code Playgroud)
所以是的,你应该关闭那个阅读器。不是为了资源,而是为了优秀的风格和可能跟随你的程序员。你不知道这个实例将被传递到哪里以及其他人会尝试用它做什么。有一天,您可能还会选择更改接口并接受任何 Reader 实现,在这种情况下,您可能会处理需要调用 close() 以释放资源的 Reader。
因此,在完成此实例后,防止进一步(可能是错误的)使用此实例是一种很好的方式。而且由于它没有伤害,它只会防止将来可能出现的错误。
编辑: 既然你说你的 close() 方法声明了一个可能会抛出的异常,我会说你需要调用 close() 因为 StringReader.close() 不会抛出异常。但是, Reader.close() 确实如此。因此,您已经允许 Reader 的其他实现,因此您必须关闭它,因为您无法知道最终会获得 Reader 的哪些实现。如果我们谈论的是永远不会离开该范围的三行代码,请声明您的变量 StringReader 并无论如何调用 close(在这种情况下没有异常处理)。
| 归档时间: |
|
| 查看次数: |
8148 次 |
| 最近记录: |