2012-02-05 16 views
32

Ho visto molti esempi diversi di usare HttpURLConnection + InputStream e chiuderli (o non chiuderli) dopo l'uso. Questo è ciò che mi è venuto in mente per assicurarmi che tutto sia chiuso dopo aver finito, se c'è un errore o meno. E 'questo valido ?:Chiudere URLConnection e InputStream correttamente?

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(); 
    } 
} 

Grazie

risposta

18

Yep .. Facendo la parte fine a se finalmente sarebbe migliore idea, perché se il codice non riesce da qualche parte, il programma non raggiungerà fino .close(), .disconnect() dichiarazioni che teniamo prima le dichiarazioni di cattura ...

Se il codice non riesce da qualche parte e viene generata un'eccezione in mezzo del programma, ancora, infine, vengono eseguiti indipendentemente eccezione generata ...

+5

anche voi volete setConnectTimeout e setReadTimeout così che nel caso in cui il server non sia disponibile o abbia un errore di lettura, la connessione non si bloccherà per sempre. –

+1

@metalideath - sicuramente, li ho omessi solo per concisione, aggiungerò una nota nell'esempio nel caso qualcuno la usi come copia/incolla. – user291701

+0

@metalideath: d'accordo con te ... Qui ho appena risposto come per domanda ... ci sono molte cose in questo mondo, dobbiamo esplorarlo ... –

Problemi correlati