2012-02-05 17 views
32

HttpURLConnection + InputStream işlevini kullanmanın ve kullanımdan sonra bunları kapatmanın (ya da kapatmamanın) birçok farklı örneğini gördüm. Bu, her şey bittikten sonra, bir hata olup olmadığı konusunda emin olmak için geldim. Bu ?: geçerliURLConnection ve InputStream'in doğru şekilde kapatılması?

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

Teşekkür mı

cevap

18

Evet .. kod yerde başarısız olursa, program .close() kadar önce tutmak .disconnect() ifadeleri ulaşamayacaktır çünkü nihayet son bölümünü yapmak iyi bir fikir olacağını catch ifadeleri ...

kod yerde başarısız olur ve istisna programının arasına atılmış ise

hala nihayet

+5

Ayrıca böylece setConnectTimeout ve setReadTimeout istiyorum ... ne olursa olsun hata atıldı idam Sunucunun mevcut olmaması veya okuma hatası olması durumunda bağlantı sonsuza kadar kilitlenmez. –

+1

@metalideath - kesinlikle, sadece kıskançlık için onları ihmal ettim, birilerinin bir kopya/yapıştır olarak kullanması durumunda örnekte bir not ekleyecektir. – user291701

+0

@metalideath: anlaştığınızdan ... İşte ben sadece bu soruya göre cevap ... Bu dünyada pek çok şey vardır, bunu keşfetmek zorundayız ... –

İlgili konular