18/05/06 04:49:26.60 Bse1bLkg.net
flush() があった方が良いのは BufferedOutputStream や BufferedWriter のインスタンス経由で
出力していて尚且つ close() するよりも前に今まで出力した分がバッファから全て出力されて
欲しい場合だろう。そうでないのなら普通は無意味、というか、Bufferedでないクラスなら多分
何もしていない。(バッファがないなら flush() も何もないからね)。
>>432のプログラムの場合 FileOutputStream を作っているだけなのでバッファリングはされて
おらず write() した直後に書かれている筈だ。更に終わったらすぐに close() するだけなので
たとえバッファリングされていたとしても close() 前に flush() をする必要はない。
ただ問題は1バイトづつ読んだり書いたりするようになっていて非常に効率が悪いことだ。
入出力は両方ともこんな風にバッファリングされるようにした方が良い。
InputStream is = new BufferedInputStream(url.openStream());
OutputStream os = new BufferedOutputStream(new FileOutputStream("dj4.ico"));
更に読み書きする部分も以下のように自分でバッファ作ってまとめて読んでまとめて書くようにした方が良い。
(1000である必要はない。もっと大きくても良い)。
byte[] buf = new byte[1000];
int n;
while ((n = is.read(buf)) > 0)
os.write(buf, 0, n);
こうした時の速度差は何Mバイトとか何Gバイトもの大量のデータを扱うと分かると思う。
(但しJavaコンパイラやJITの最適化、およびJavaVMやOSやハードウェアの進歩により
将来的にはどう書いても速く動くようになる可能性はある)。