En Java, ¿cuándo se cierra una conexión URL?

81

¿Cuándo deja Java una conexión a una URL? No veo un método close () en URL o URLConnection, entonces, ¿libera la conexión tan pronto como finaliza la solicitud? Principalmente estoy preguntando si necesito hacer alguna limpieza en un controlador de excepciones.

try {
  URL url = new URL("http://foo.bar");
  URLConnection conn = url.openConnection();
  // use the connection
}
catch (Exception e) {
  // any clean up here?
}
timdisney
fuente
10
Nunca use catch (Exception), si se lanza una excepción específica, capture cada uno en su propia cláusula
OscarRyz
4
o al menos detectar la excepción en último lugar (en caso de que ninguno de los demás detecte la excepción).
jeremy

Respuestas:

49

Depende del protocolo específico especificado en el protocolo. Algunos mantienen conexiones persistentes, otros cierran sus conexiones cuando su llamada se cierra en la entrada o salida proporcionada por la conexión. Pero además de recordar cerrar las transmisiones que abrió desde URLConnection, no hay nada más que pueda hacer.

Desde el javadoc para java.net.URLConnection

Invocar los métodos close () en InputStream o OutputStream de una URLConnection después de una solicitud puede liberar recursos de red asociados con esta instancia, a menos que especificaciones de protocolo particulares especifiquen comportamientos diferentes para ella.

kasperjj
fuente
2
Esto responde bien pero no cubre el caso nominal de HttpUrlConnection.
Snicolas
53

Si lanza a una HttpURLConnection, hay un método de desconexión () . Si la conexión está inactiva, probablemente se desconectará de inmediato. Sin garantías.

James Schek
fuente