2012-02-05 14 views
32

Widziałem wiele różnych przykładów użycia HttpURLConnection + InputStream i zamykania ich (lub ich zamykania) po użyciu. Oto, co wymyśliłem, aby upewnić się, że po skończeniu wszystko jest zamknięte, czy wystąpił błąd, czy nie. Jest to ważne ?:Prawidłowe zamknięcie połączenia URLConnection i InputStream?

HttpURLConnection conn = null; 
InputStream is = null; 
try { 
    URL url = new URL("http://example.com"); 

    // (set connection and read timeouts on the connection) 
    conn = (HttpURLConnection)url.openConnection(); 

    is = new BufferedInputStream(conn.getInputStream()); 

    doSomethingWithInputStream(is); 

} catch (Exception ex) { 
} finally { 
    if (is != null) { 
     try { 
      is.close(); 
     } catch (IOException e) { 
     } 
    } 
    if (conn != null) { 
     conn.disconnect(); 
    } 
} 

Dzięki

Odpowiedz

18

Tak .. Robi część końcową w końcu byłby najlepszy pomysł, bo jeśli kod nie gdzieś, program nie będzie dotrzeć do .close(), .disconnect() oświadczenia, że ​​należy przed instrukcje catch ...

Jeżeli kod nie powiedzie się gdzieś i jest wyjątek pomiędzy programu, jeszcze w końcu zostanie wykonany niezależnie od wyjątku rzucony ...

+5

także chcą setConnectTimeout i setReadTimeout tak że w przypadku, gdy serwer nie jest dostępny lub ma błąd odczytu, połączenie nie zostanie zablokowane na zawsze. –

+1

@metalideath - zdecydowanie, pominąłem je tylko dla zwięzłości, dodam notatkę w przykładzie na wypadek, gdyby ktoś użył jej jako kopii/wklejenia. – user291701

+0

@metalideath: Zgodziłem się z tobą ... Tutaj po prostu odpowiedziałem na pytanie ... jest wiele rzeczy na tym świecie, musimy to zbadać ... –

Powiązane problemy