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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
IOException ってどういうときに起こるのでしょうか?
Java
-
Path型をString型へ変換する(Java)
Java
-
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
-
4
ファイル読み込み/書き込み速度を上げるには
Java
-
5
ループ処理の際、最後だけ,"をつけたくない"
Java
-
6
close()で例外が投げられる理由
Java
-
7
[JAVA]try 内の変数を外で!?
Java
-
8
JSPの処理の途中で、JavaScriptの処理をしたい
JavaScript
-
9
有無、要否、賛否、是非、可否、当否…これらの言葉について
その他(教育・科学・学問)
-
10
コネクション・セッション・トランザクション、それぞれの違いについて
セキュリティホール・脆弱性
-
11
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
12
final修飾子を使っているのに、なぜエラーが出るのでしょうか?
Java
-
13
【C#/Java?】try-catchでcatchせずにfinallyは一般的?
その他(プログラミング・Web制作)
-
14
Eclipseのアンインストールの仕方
Java
-
15
生成したインスタンスを削除する方法
Java
-
16
未、済、完了の英訳は?
英語
-
17
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
18
Java初級 引数に適用できません
Java
-
19
ResultSetインターフェイスでの next() の使い方
Java
-
20
servletからjspへオブジェクトの配列情報を送る方法
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Log4jで機能毎に別ファイルへ出...
-
system.out.printが出力されない
-
flush()とclose()について
-
JavaScriptの変数をjavaのメソ...
-
1~100までの数字を表示したい
-
InputStreamはreadが1回しかで...
-
Eclipseのコンソールを常に表示...
-
javaにおけるCSV出力時の文字コ...
-
JavaScriptでcgiの戻り値を受け...
-
Log4Jではログを改行できない?
-
数字文字列をパック10進数に変...
-
switch分が機能しません。
-
System.out.printlnの出力先
-
サーブレットPrintWriterについて
-
getName()で取得したファイル名...
-
JAVAのdouble型情報をリトルエ...
-
HTMLタグのエスケープ文字をタ...
-
log4jでスタックトレースを出力...
-
Javaで改行などが出来ないのです。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Log4jで機能毎に別ファイルへ出...
-
System.err. printlnとSystem.o...
-
flush()とclose()について
-
Javaで改行などが出来ないのです。
-
system.out.printが出力されない
-
1~100までの数字を表示し、か...
-
System.out.printlnの出力先
-
Eclipseのコンソールを常に表示...
-
1~100までの数字を表示したい
-
JavaScriptの変数をjavaのメソ...
-
javaにおけるCSV出力時の文字コ...
-
System.out.printlnの意味がよ...
-
Javaの問題なのですが、 永久ル...
-
StringBufferで改ページ処理を...
-
テキストエリアで改行する
-
switch分が機能しません。
-
一定のスペースを空けて端を揃...
-
VBSエラー"オブジェクト型の変...
-
数字文字列をパック10進数に変...
-
Tomcatが無応答となる現象が起...
おすすめ情報