やらかしました
相変わらず、蟷螂と格闘中ですが、そんな中、NewIOをちょっと勉強しようと思い、(Input/Output)StreamとChannelの比較をするため、以前書いたStream版ファイルコピーのコードをとりだしてみた。
さて、Stream版のバッファサイズはー....とcopyメソッドを見ると、こんなんなってました。
// サンプル1 private static void copy(InputStream is, OutputStream os) throws IOException { for (int c; (c = is.read()) != -1;) { os.write(c); } }
バッファリングしてない。何故だ。バッファリングくらい知ってたはずなのに。
NewIOどころではないので、とりあえずこれをバッファリングするのに書き換えて実行時間を比較。(2006.03.01:一部修正)
// サンプル2 private static void copy(InputStream is, OutputStream os) throws IOException { byte[] buffer = new byte[0x1000]; for (int c; (c = is.read(buffer)) >= 0;) { os.write(buffer, 0, c); } os.flush(); }
ファイル:約19MB (キャッシュされていないこと) サンプル1の結果: 102234 ミリ秒 サンプル2の結果: 5657 ミリ秒
こんなっ... バカなっ...*1
*1:一概に遅いから悪いとは言えないが、この差はちょっと致命的。