在Java中,URL连接何时关闭?


81

Java什么时候放开与URL的连接?我在URL或URLConnection上都没有看到close()方法,所以一旦请求完成,它会释放连接吗?我主要是询问是否需要在异常处理程序中进行任何清理。

try {
  URL url = new URL("http://foo.bar");
  URLConnection conn = url.openConnection();
  // use the connection
}
catch (Exception e) {
  // any clean up here?
}

10
切勿使用catch(Exception),如果抛出特定异常,则在自己的子句中捕获每个异常
OscarRyz

4
或至少最后捕获到异常(以防其他人没有捕获到异常)。
杰里米

Answers:


49

它取决于协议中指定的特定协议。一些维护持久连接,而其他一些则在您的呼叫在连接给定的输入或输出流中关闭时关闭其连接。但是除了记住关闭从URLConnection打开的流之外,您无能为力。

从javadoc中获取java.net.URLConnection

在请求之后在URLConnection的InputStream或OutputStream上调用close()方法可能会释放与此实例关联的网络资源,除非特定的协议规范为其指定了不同的行为。


2
这回答得很好,但没有涵盖HttpUrlConnection的名义用例。
尼克斯

53

如果强制转换为HttpURLConnection,则有一个connect ()方法。如果连接空闲,则可能会立即断开连接。没有保证。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.