OutputStream#write(int) が遅い
Servletのファイルダウンロード処理にOutputStream#write(int)を使っていたんですが、コレが非常に遅くて困った
ServletOutputStream outputStream = response.getOutputStream(); int int outputData = 0; while ((outputData = inputStream.read()) != -1){ outputStream.write(outputData); } outputStream.close();
OutputStream#write(data, off, length)を使う
Apacheの公開領域に同じファイルを置いてダウンロードするのと比較すると、テスト環境で10倍も処理時間がかかるのはやっぱりおかしい!
ということで、この部分を以下のようにバッファ処理を行うように修正
byte[] buf = new byte[4096]; while ((length = inputStream.read(buf)) != -1){ outputStream.write(buf, 0, length); }
すると処理速度が急激に速くなった!(Javaを介さず直接ダウンロードと同じぐらい!)
これ、普通にファイルストリーム出力の実装では全部こうしたほうがいいっぽいね
バッファ処理、侮れない…