【发布时间】:2017-06-21 10:20:52
【问题描述】:
InputStreamReader 的 JavaDoc 没有说明关闭底层 InputStream:
https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html#close--
从班级复制的描述:读者
关闭流并释放与其关联的所有系统资源。关闭流后,进一步的 read()、ready()、mark()、reset() 或 skip() 调用将引发 IOException。关闭之前关闭的流没有任何效果。
关闭 InputStreamReader 是否也会关闭底层 InputStream?
更新在:
InputStreamReader istream = new InputStreamReader(conn.getInputStream(), "UTF-8")
istream.close();
我需要关闭conn.getInputStream()吗?
InputStreamReader 实现直接 close 调用 StreamDecoder 这是一个原生类。
【问题讨论】:
-
是的。您认为“流”指的是哪个流?
-
@AndyTurner 我想你会发现它没有关闭它。
-
@KlitosKyriacou
InputStreamReader将关闭StreamDecoder以关闭指向它的InputStream链接。见the source code -
@KlitosKyriacou 这取决于您所说的“关闭”是什么意思。我的意思是
InputStreamReader.close()调用了InputStream的close()方法;这与InputStreamReader完全无关。 -
作为一个兴趣点,相比之下,java.util.Scanner 的 Javadoc 似乎更清晰、更明确:“当 Scanner 关闭时,如果源实现 Closeable 接口。”另一方面,InputStreamReader.close() 的Javadoc 只是接口Reader.close() 的一个副本。还有其他读者。 StringReader.close() 的 Javadoc 还说“关闭流并释放与之关联的任何系统资源”。这适用于字符串上的阅读器。它在说什么流?
标签: java