« 2ch 騒動について | トップページ | 半角スペース入れるべきか »

2007年1月14日 (日)

BufferedWriter の close はその接続先も close すべきか

件名は BufferedWriter となっているけれども、FilterWriter/Reader/InputStream/OutputStream 全てに当てはまる内容だし、Java 以外の言語にも当てはまる。

で、BufferedWriter の close はそのの close もすべきかというと、もちろん俺の答えは yes だ。

unibon 氏は例外が出たときに親が完全に close されないことを気にしているようだが、それはいくら気にしても解決できる問題ではない。そもそも unibon 氏は BufferedWriter の close の中で親の flush が呼ばれたときに例外が出ることしか心配していないように見受けられるが、実際にはその後に親の close が呼ばれたときに例外が発生する可能性だってある。親を閉じようとしたら例外が出て閉じられなかったということになったら、もう対処のしようがない。だから、100% 確実にストリームを閉じる方法はない、という事実をまず認識しなくてはいけない。

それに、もし BufferedWriter の close が親の Writer を close しないということになっていたとしたら、次のようなコードは書けなくなる。

void readData() throws IOException {
    Writer w = getWriter();
    w.write(xxx);
    w.close();
}

protected abstract Writer getWriter() throws IOException;

上のコードで、もし getWriter が BufferedWriter を返したとしたら、readData メソッドはどうやってその親を閉じればいいのか。readData の中の w.close(); で親も close されること期待するしかない。だから、BufferedWriter の close は親も close してくれないと困るのだ。

|

« 2ch 騒動について | トップページ | 半角スペース入れるべきか »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/169172/13487984

この記事へのトラックバック一覧です: BufferedWriter の close はその接続先も close すべきか:

« 2ch 騒動について | トップページ | 半角スペース入れるべきか »