Коли в Java замикається URL-зв’язок?


82

Коли Java відпускає з'єднання з URL-адресою? Я не бачу методу close () ні на URL, ні на URLConnection, так чи звільняє це з'єднання, як тільки запит закінчується? Я в основному прошу побачити, чи потрібно мені чистити в обробнику винятків.

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

10
Ніколи не використовуйте catch (виняток), якщо викидається конкретний виняток, ловіть кожен у своєму власному реченні
OscarRyz

4
або принаймні зловити виняток останнім (якщо жоден з інших не вловлює виняток).
jeremy

Відповіді:


50

Це залежить від конкретного протоколу, зазначеного в протоколі. Деякі підтримують постійні зв’язки, інші замикають свої зв’язки, коли ваш дзвінок замикається у вхідному чи вихідному потоці, заданому підключенням. Але окрім того, що ви пам’ятаєте закрити потоки, які ви відкрили з URLConnection, нічого іншого ви не можете зробити.

З javadoc для java.net.URLConnection

Виклик методів close () на InputStream або OutputStream URLConnection після запиту може звільнити мережеві ресурси, пов’язані з цим екземпляром, якщо окремі специфікації протоколу не визначають для нього різні способи поведінки.


2
Це відповідає добре, але не охоплює номінальний випадок HttpUrlConnection.
Snicolas

53

Якщо ви перетворюєте на HttpURLConnection, існує метод disconnect () . Якщо з’єднання перебуває в режимі очікування, можливо, воно негайно роз’єднається. Ніяких гарантій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.