Javaを独習Javaで独習しています。現在、入出力の所まできたのですが、Writerクラスのclose()とflush()の違いがわかりません。それぞれのメソッドの意味はわかるのですがそれらを使う目的がわかりません。flush()は「バッファ付けデータをそのストリームで表されている物理デバイスに書き込む」とあるのですが、サンプルには(バッファ付け文字ストリームの単元にも)flush()は一度も出てこずclose()のみで書き込みが行われています。探したのですが独習Javaのサンプルの中には結局flush()は一度も出てきませんでした。この二つの違いはなんなのでしょうか?初心者のためわかりにくい質問かとは思いますがよろしくお願いします。
No.2ベストアンサー
- 回答日時:
フラッシュすれば、ファイルやその他物理デバイスに強制的にバッファの内容が出力されるということは、理解されていると考えてよいですね?
で、なかなかストリームをクローズできない(またはしない)場合には、いつまで経ってもバッファの内容が物理デバイスに出力されないかも知れませんよね?でも、適当なタイミングで定期的にフラッシュすれば、その時点でバッファに溜まっている内容が物理デバイスに出力されます。
そのサンプルの場合は、書き出してすぐ?クローズしちゃうため、明示的なフラッシュは必要なかったんだと思いますが、
・フラッシュは、(ストリームを閉じずに)バッファの内容を強制的に物理デバイスに出力する。
・クローズは、(フラッシュされていなければフラッシュしてから)そのストリームを閉じる。
とまぁ、目的も内容も全然違うわけです。
回答ありがとうございます。サンプルのような小さなプログラムではflush()する必要はないということですね?ありがとうございました。
No.1
- 回答日時:
一言でいうと,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 …
図を使ってのわかりやすい回答ありがとうございます。自分が今、勉強している程度のプログラムではflush()は必要ないのだとわかりました。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
System.err. printlnとSystem.out.printlnはどう違うんでしょうか?
Java
-
IOException ってどういうときに起こるのでしょうか?
Java
-
PrintWriterとBufferedWriterの違い
Java
-
-
4
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
5
Winmerge ファイルの中身は同じなのに黄色くなる
その他(OS)
-
6
Eclipse・プロジェクトで、フォルダをパッケージとして認識する
Java
-
7
SELECT 文の NULL列は?
PostgreSQL
-
8
close()で例外が投げられる理由
Java
-
9
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
10
Path型をString型へ変換する(Java)
Java
-
11
【DB】同じトランザクション内でupdateとselectをしたときの結果値
その他(データベース)
-
12
python エラー
その他(プログラミング・Web制作)
-
13
フォーム上で押されたボタンによってサーブレットの処理を変えたい
Java
-
14
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
15
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
16
[Ljava.lang.Stringってなんですか
Java
-
17
データ数をカウントしたいのですが
Java
-
18
「配列定数は、イニシャライザーにおいてのみ使用可能です。」
Java
-
19
配列のメソッド
Java
-
20
一部のカラムでdistinctし全てのカラムを取得
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1~100までの数字を表示し、か...
-
Log4jで機能毎に別ファイルへ出...
-
System.err. printlnとSystem.o...
-
flush()とclose()について
-
Log4Jではログを改行できない?
-
テキストエリアで改行する
-
java for文、if文を使っての三角形
-
Javaで改行などが出来ないのです。
-
カウントアップ
-
【SQLServer接続のJSPの記述を...
-
JMeterについて教えてください
-
数字文字列をパック10進数に変...
-
$.getJSONにJSON.stringifyを
-
大容量のテキストファイルの内...
-
system.out.printが出力されない
-
javaのwhile文で九九の表
-
OpenSSL関数エラーについて
-
ORA-01858: 数値を指定する箇所...
-
javaで質問です。 文字列2023/2...
-
VBAで配列の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
1~100までの数字を表示し、か...
-
flush()とclose()について
-
Log4jで機能毎に別ファイルへ出...
-
System.out.printlnの出力先
-
1~100までの数字を表示したい
-
system.out.printが出力されない
-
Eclipseのコンソールを常に表示...
-
JavaScriptの変数をjavaのメソ...
-
tomcatのstdout.logを停止したい。
-
数字文字列をパック10進数に変...
-
java ファイル操作について
-
InputStreamはreadが1回しかで...
-
switch分が機能しません。
-
VBAでEUC-JPのHTMLソースを取得...
-
テキストエリアで改行する
-
Tomcatが無応答となる現象が起...
-
VBSエラー"オブジェクト型の変...
-
JAVAのServletで、画像表示につ...
おすすめ情報