2012-02-05 18 views
32

He visto muchos ejemplos diferentes de usar HttpURLConnection + InputStream, y cerrarlos (o no cerrarlos) después de su uso. Esto es lo que se me ocurrió para asegurarme de que todo esté cerrado una vez terminado, ya sea que haya un error o no. Es esto válido ?:¿Cerrar URLConnection y InputStream correctamente?

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

Gracias

Respuesta

18

Sip .. Hacer la parte final en finalmente sería mejor idea ya que si falla alguna parte de código, el programa no llegará hasta .close(), .disconnect() declaraciones que mantenemos antes declaraciones de capturas ...

Si el código de falla en alguna parte y excepción en entre el programa, siendo finalmente se ejecutan independientemente de excepción lanzada ...

+5

también quieren setConnectTimeout y por lo setReadTimeout que en el caso de que el servidor no esté disponible o tenga un error de lectura, la conexión no se bloquea para siempre. –

+1

@metalideath - definitivamente, los omití solo por concisión, agregaré una nota en el ejemplo en caso de que alguien la use como una copia/pega. – user291701

+0

@metalideath: estoy de acuerdo con usted ... Aquí acabo de responder según la pregunta ... hay muchas cosas en este mundo, tenemos que explorarlo ... –

Cuestiones relacionadas