Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

closeについて

 BufferedReader やInputStreamReaderのcloseは必要でしょうか?
なぜかと言うと書籍とかネットのサンプルコードを見ると、finallyでcloseしていないのをよく見かけるのです。
例えば下記はandroidのHttpURLConnectionのページのサンプルもそうです。
これは単にコードの説明をするのに冗長にならないようにはしょってるだけなのでしょうか?
それとも自動でcloseしてくれるのでしょうか?
https://developer.android.com/reference/java/net/HttpURLConnection.html

4

回答

91217

閲覧

4件の回答

評価

0

難しくてよく分かりません。

評価

0

BufferedReaderについては、ソースを読めるからそれで要否が分かるだろう。

HttpURLConnectionは、そのJavaDocのUses of this class follow a patternを読もう。
箇条書きの最終項に、何と書いてある?

評価

0

「Javaのメモリーだけを解放すれば良いケースなら、使われなくなったときにGCによって解放されるので良いのですが、ファイル入出力の場合は、Javaだけでなく、OS側のファイルシステムにファイルを閉じることを通知する必要があるので、明示的にクローズが必要となります。」とのことです。

https://teratail.com/questions/18906

評価

0

BufferedReaderはただのバッファリング機能であり、ファイルとは関係がない。
BufferedReader#close()は単に内包するInputStreamReaderの#close()への委譲メソッドだ。
なので厳密には、「InputStreamReaderを#close()できるなら」#close()する必要はない。

仮に
InputStreamReader isr = new InputStreamReader(...);
BufferedReader br = new BufferedReader(isr);
とそれぞれのインスタンスを保持しているなら
br.close();
isr.close();
とするのは無意味で、isr.close()だけで事足りる。


なお、finallyでclose()していないサンプルは、
1.try~resourcesを使っている
2.面倒なので端折った
3.本当に知らない
のどれかだろう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。