当使用HttpURLConnection时,如果我们没有“获取并使用”InputStream,是否需要关闭它?
也就是说,这样做安全吗?
HttpURLConnection conn = (HttpURLConnection) uri.getURI().toURL().openConnection();
conn.connect();
// check for content type I don't care about
if (conn.getContentType.equals("image/gif") return;
// get stream and read from it
InputStream is = conn.getInputStream();
try {
// read from is
} finally {
is.close();
}
其次,如果在完全读取所有内容之前关闭InputStream,是否安全?
会不会存在将底层套接字留在ESTABLISHED甚至CLOSE_WAIT状态的风险?
HttpUrlConnection.disconnect()
方法可以关闭底层的tcp套接字。通过关闭输入流,底层的tcp套接字可供以后重用。唯一的注意事项是必须从输入流中读取整个响应(或整个错误响应)才能将tcp连接缓存。无论您实际上是否需要来自流的全部数据,这都是建议的。请查看我回答中的帖子。 - Cratylus