当您关闭以下输入流时会发生什么?
InputStream is = new URL(queryUrl).openStream();
由于它是一个URL连接,它是否足够聪明,可以在请求后自动关闭?
我试着查看文档,但它很模糊。根据我们收集的内容,这与执行HTTPUrlConnection.getInputStream()
相同。
我只想弄清楚不做is.close()
的影响。这肯定会导致资源泄漏吗?
答案 0 :(得分:2)
当您致电close
时,会释放相关的系统资源。如果你看一下方法URL.openStream()
public final InputStream openStream() throws java.io.IOException {
return openConnection().getInputStream();
}
public URLConnection openConnection() throws java.io.IOException {
return handler.openConnection(this);
}
根据javadoc
返回URLConnection
在请求之后调用URLConnection的InputStream或OutputStream上的close()方法可以释放与此实例关联的网络资源,除非特定的协议规范为其指定了不同的行为。
例如,如果您看到HttpURLConnection,他们的文档会说:
在请求之后调用HttpURLConnection的InputStream或OutputStream上的close()方法可以释放与此实例关联的网络资源,但不会影响任何共享持久连接。如果此时持久连接处于空闲状态,则调用disconnect()方法可能会关闭底层套接字。
干杯!!