Domanda Chiudere correttamente URLConnection e InputStream?


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. È valido ?:

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


33
2018-02-05 14:57


origine


risposte:


Sì. Fare la parte finale in definitiva sarebbe l'idea migliore perché se il codice fallisce da qualche parte, il programma non arriverà fino a .close(), .disconnect() dichiarazioni che conserviamo prima delle dichiarazioni di cattura ...

Se il codice fallisce da qualche parte e viene lanciata un'eccezione tra il programma, viene comunque eseguito, indipendentemente dall'eccezione generata ...


17
2018-02-05 15:01