![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- 英語 英語の「Asian flush」という言葉の意味について 1 2022/07/22 17:12
- 英語 The implant was placed to be flush with the crest 3 2022/04/30 00:48
- その他(海外) 海外留学の経験がある方や、英語圏の文化に詳しい方に伺いたいことがあります。 1 2022/06/28 10:39
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- JavaScript Python Java,Springフレームワークの習得 1 2023/08/02 15:28
- Java Javaについて質問です。 勉強し始めたばかりの初心者です。 相続税について課税額を算出するコードを 1 2022/05/31 19:02
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- その他(ゲーム) マインクラフトJAVA版の導入・ローカルマルチプレイについて 1 2022/03/23 18:59
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
IOException ってどういうときに起こるのでしょうか?
Java
-
System.err. printlnとSystem.out.printlnはどう違うんでしょうか?
Java
-
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
-
4
flush()メソッドについて・・・
Java
-
5
PrintWriterとBufferedWriterの違い
Java
-
6
readLine()ではじめから読み直す方法
Java
-
7
jarファイル
Java
-
8
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
9
close()で例外が投げられる理由
Java
-
10
「ワークスペースをビルド中」止められず
Java
-
11
javaクラスファイルをEclipseで開きたい
Java
-
12
Path型をString型へ変換する(Java)
Java
-
13
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
14
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
15
フォーム上で押されたボタンによってサーブレットの処理を変えたい
Java
-
16
Eclipse・プロジェクトで、フォルダをパッケージとして認識する
Java
-
17
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
18
javaで、、、
Java
-
19
substring バイト単位でやりたい
Java
-
20
JSPの処理の途中で、JavaScriptの処理をしたい
JavaScript
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハートマークを表示するには?
-
System.out.printlnの出力先
-
Log4jで機能毎に別ファイルへ出...
-
バイトスワップ
-
Java 九九の表について
-
System.err. printlnとSystem.o...
-
ArrayListによる計算表作成
-
Javaで改行などが出来ないのです。
-
VBAでEUC-JPのHTMLソースを取得...
-
javaについて
-
JAVAの四捨五入
-
1~100までの数字を表示し、か...
-
system.out.printが出力されない
-
数字文字列をパック10進数に変...
-
eclipseに記述したjavaファイル...
-
C# 半角カナの文字化けについて
-
【JAVAエラー】互換性のない型...
-
Javaで文字と数字が混ざったも...
-
0~9まで入力させ、前に入力さ...
-
配列への文字列の格納について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
Log4jで機能毎に別ファイルへ出...
-
System.out.printlnの出力先
-
1~100までの数字を表示し、か...
-
Eclipseのコンソールを常に表示...
-
system.out.printが出力されない
-
JAVAのServletで、画像表示につ...
-
1~100までの数字を表示したい
-
テキストエリアで改行する
-
switch分が機能しません。
-
一定のスペースを空けて端を揃...
-
Tomcatが無応答となる現象が起...
-
数字文字列をパック10進数に変...
-
JavaScriptの変数をjavaのメソ...
-
バイトスワップ
-
tomcatのstdout.logを停止したい。
-
Java 九九の表について
-
ダブルクォーテーション(””)...
おすすめ情報