質問: flush()とclose()について javaを独習javaで独習しています。現在、入出力の所まできたのですが、writerクラスのclose()とflush()の違いがわかりません。それぞれのメソッドの意味はわかるのですがそれらを使う目的がわかりません。flush()は「バッファ付けデータをそのストリームで表されている物理デバイスに書き込む」とあるのですが、サンプルには(バッファ付け文字ストリームの単元にも)flush()は一度も出てこずclose()のみで書き込みが行われています。探したのですが独習javaのサンプルの中には結局flush()は一度も出てきませんでした。この二つの違いはなんなのでしょうか?初心者のためわかりにくい質問かとは思いますがよろしくお願いします。
回答: 一言でいうと,flush()は何度でも実行できるけど,close()は(当該writerインスタンスに対して)1回しか実行できない,という違いがあります。 また,flush()を実行した後でもwrite()を使って書きこみを行うことができますが,close()の実行後にwrite()を行おうとするとioexceptionがスローされます。 flush()は単に内部バッファにたまっているデータを出力先に書き出す処理で,close()は内部バッファにたまっているデータを出力先に書き出した後,内部バッファと出力先を閉じてそれ以上書込を受け付けないようにする処理です。 内部バッファ:■■■■■ 出力先 :~ ↓ flush(); ↓ 内部バッファ: 出力先 :~■■■■■ ↓ write("■■■"); ↓ 内部バッファ:■■■ 出力先 :~■■■■■ ↓ close() ↓ 内部バッファ:<書込不可> 出力先 :~■■■■■■■■<書込不可> イメージとしてはこんな感じだと思います。 参考url:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/writer.html