2011-12-14 7 views
5

次のコードでは、outPutStreamのclose関数は、捕捉する必要があるIOException例外をスローします。私の質問は私がそれを処理する必要がありますか?私はモバイルデバイスで作業しているので、私が使用しているすべてのリソースを解放するか、例外を無視しても問題はありません。OutputStream close()関数で発生したIOExceptionを処理するか無視する必要がありますか?

//... 
OutputStream output = null; 
try { 
    output = connection.getOutputStream(); 
    output.write(query.getBytes(charset)); 
} finally { 
    if (output != null) try { 
     output.close(); 
    } catch (IOException e) { 
     // Do i need to do something here ? 
    } 
} 
+0

投げられる可能性がある例外を無視してはならない、Java 7のTry-Withリソースブロックを見てみると、このコードは少し面白く見えるかもしれません。http://docs.oracle.com/javase/チュートリアル/必須/例外/ tryResourceClose.html –

+0

これで何ができますか? – DaveRlz

+0

ええ、それはいつも私の頭を傷つけるようにしてきました。私がいつもやっているのは、エラーが記録されるだけなので、それが起こった場合、私はそれがわかっていますが、この状況(もしあれば)で回復するために何をしなければならないのか分かりません。 –

答えて

7

閉じることができない場合はどうすればよいですか?

唯一できることは、例外をログに記録することです。@mprabhatは、GCの高速化のためにnullへの参照を設定できることを示唆しています。

+0

flush()を呼び出すことは意味がありますか?または実行することができません。 – Jimmy

+0

私はそれもIOExceptionをスローすると思う – stivlo

+0

私はそれがdosecentを意味すると思う、少し読書を閉じると、まずフラッシュを呼び出します。 – Jimmy

0

最悪の場合、警告を発することができます。しかし、一般的に、このような例外はすでに閉じられたセッションを閉じるときにスローされます。この場合、何もする必要はありません。

3

javaのドキュメントでは、すべての異なる条件が閉じるとIOExceptionが投げられるので、多くのことはできません。

少なくとも、OutputStreamの参照をnullに設定し、例外を記録することができます。

+0

良いアイデアでは、参照をnull +1に設定することは意味があります – stivlo

0

有効なJavaでは、Joshua Blochはこれを無視したい例外の1つとして言及しています。しかし一般的には、単にログに記録する以外にも、例外でもっと多くのことをしたいと言っています。

関連する問題