Kiedy w Javie zamyka się połączenie URL?


82

Kiedy java zwalnia połączenia do adresu URL? Nie widzę metody close () ani w adresie URL, ani w URLConnection, więc czy zwalnia ona połączenie zaraz po zakończeniu żądania? Pytam głównie o to, czy muszę wyczyścić procedurę obsługi wyjątków.

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

10
Nigdy nie używaj catch (Exception), jeśli zostanie
zgłoszony

4
lub przynajmniej złap wyjątek jako ostatni (w przypadku, gdy żaden z pozostałych nie łapie wyjątku).
jeremy

Odpowiedzi:


50

Zależy to od konkretnego protokołu określonego w protokole. Niektóre utrzymują trwałe połączenia, inne zamykają swoje połączenia, gdy wywołanie zamyka się w strumieniu wejściowym lub wyjściowym podanym przez połączenie. Ale poza pamiętaniem o zamykaniu strumieni, które otworzyłeś z połączenia URL, nie możesz zrobić nic więcej.

Z javadoc dla java.net.URLConnection

Wywołanie metod close () na InputStream lub OutputStream obiektu URLConnection po żądaniu może zwolnić zasoby sieciowe skojarzone z tą instancją, chyba że specyfikacje protokołów określają inne zachowanie.


2
Odpowiada to dobrze, ale nie obejmuje nominalnego przypadku HttpUrlConnection.
Snicolas,

53

Jeśli rzutujesz na HttpURLConnection, istnieje metoda rozłączenia () . Jeśli połączenie jest bezczynne, prawdopodobnie natychmiast się rozłączy. Żadnych gwarancji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.