42 votes

Fermer correctement URLConnection et InputStream ?

J'ai vu de nombreux exemples différents d'utilisation de HttpURLConnection + InputStream, et de leur fermeture (ou non) après utilisation. Voici ce que j'ai trouvé pour m'assurer que tout est fermé après avoir terminé, qu'il y ait une erreur ou non. Est-ce que c'est valable ?

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

Merci

20voto

Fahim Parkar Points 8662

Oui Faire la partie finale dans finally serait la meilleure idée car si le code échoue quelque part, le programme n'arrivera pas jusqu'à .close() , .disconnect() les déclarations que l'on garde avant les déclarations de capture...

Si le code échoue quelque part et qu'une exception est levée au milieu du programme, le programme sera quand même exécuté indépendamment de l'exception levée...

5voto

user396483 Points 697

Il y a aussi la nouvelle (avec Java 7) ' essayer() Technique

        try (OutputStream os = http.getOutputStream()) {
            os.write(out);
        }

Fondamentalement, il fermera automatiquement tout ce qui se trouve dans l'instruction try(), qu'elle soit réussie ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X