Wann wird in Java eine URL-Verbindung geschlossen?

82

Wann lässt Java eine Verbindung zu einer URL los? Ich sehe weder für URL noch für URLConnection eine close () -Methode. Wird die Verbindung freigegeben, sobald die Anforderung abgeschlossen ist? Ich frage hauptsächlich, ob ich in einem Ausnahmebehandler bereinigen muss.

try {
  URL url = new URL("http://foo.bar");
  URLConnection conn = url.openConnection();
  // use the connection
}
catch (Exception e) {
  // any clean up here?
}
timdisney
quelle
10
Verwenden Sie niemals catch (Ausnahme). Wenn eine bestimmte Ausnahme ausgelöst wird, fangen Sie jede in einer eigenen Klausel
OscarRyz
4
oder zumindest die Ausnahme zuletzt abfangen (falls keiner der anderen die Ausnahme abfängt).
Jeremy

Antworten:

50

Dies hängt von dem im Protokoll angegebenen spezifischen Protokoll ab. Einige unterhalten dauerhafte Verbindungen, andere schließen ihre Verbindungen, wenn Ihr Anruf in dem von der Verbindung vorgegebenen Eingangs- oder Ausgangsstrom geschlossen wird. Aber außer daran zu denken, die Streams zu schließen, die Sie über die URLConnection geöffnet haben, können Sie nichts anderes tun.

Aus dem javadoc für java.net.URLConnection

Das Aufrufen der close () -Methoden im InputStream oder OutputStream einer URLConnection nach einer Anforderung kann die mit dieser Instanz verknüpften Netzwerkressourcen freigeben, es sei denn, bestimmte Protokollspezifikationen geben unterschiedliche Verhaltensweisen dafür an.

kasperjj
quelle
2
Dies antwortet gut, deckt jedoch nicht den nominalen Fall von HttpUrlConnection ab.
Snicolas
53

Wenn Sie in eine HttpURLConnection umwandeln, gibt es eine Methodeconnect () . Wenn die Verbindung inaktiv ist, wird sie wahrscheinlich sofort getrennt. Keine Garantien.

James Schek
quelle