Java入門・初心者質問スレ Part.7at TECH
Java入門・初心者質問スレ Part.7 - 暇つぶし2ch462:デフォルトの名無しさん
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やハードウェアの進歩により
将来的にはどう書いても速く動くようになる可能性はある)。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch