2012-02-05 10 views
32

私はHttpURLConnection + InputStreamを使用し、使用後にそれらを閉じる(または閉じない)多くの異なる例を見てきました。これは、エラーがあるかどうかに関係なく、すべてが終了した後に閉じられることを確認するために私が思いついたものです。これは有効です?:URLConnectionとInputStreamを正しく閉じますか?

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

おかげ

答えて

18

うん...コードはどこかに障害が発生した場合、プログラムは、我々は前に保つ.close().disconnect()文まで届かないので、最終的には最高のアイデアだろうで端部を行いますcatch文...

コードはどこかに失敗し、例外がスローされた、まだ最終的にかかわらず、例外の実行を取得、プログラムの間でスローされた場合...

+5

あなたもそうsetConnectTimeoutとsetReadTimeoutにしたいですサーバーが使用できないか、読み取りエラーが発生した場合、接続は永遠にロックされません。 –

+1

@metalideath - 確かに、簡潔にするためにそれらを省略しました。誰かがコピー/ペーストとして使用する場合の例でノートを追加します。 – user291701

+0

@metalideath:あなたと同意しました...ここで私はちょうど質問ごとに答えました...この世界には多くのことがあり、私たちはそれを探求しなければなりません... –

関連する問題