[Java]画像の読み込みスピードの比較@NIOとIO

気になったのでテストしました。

広告

使用したコード

for(int i=0;i<10;i++){
time1 = System.currentTimeMillis();
try {
BufferedImage bimg1 = ImageIO.read(Files.newInputStream(Paths.get(str)));
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
time2 = System.currentTimeMillis();
System.out.println("use NIO: "+(time2-time1));
}
for(int i=0;i<10;i++){
time1 = System.currentTimeMillis();
try {
BufferedImage bimg2 = ImageIO.read(new File(str2));
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
time2 = System.currentTimeMillis();
System.out.println("use old IO: "+(time2-time1));
}
for(int i=0;i<10;i++){
time1 = System.currentTimeMillis();
try {
FileInputStream fis = new FileInputStream(str3);
FileChannel fc = fis.getChannel();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
fc.transferTo(0, fc.size(), Channels.newChannel(baos));
BufferedImage bimg3 = ImageIO.read(new ByteArrayInputStream(baos.toByteArray()));
} catch (FileNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
time2 = System.currentTimeMillis();
System.out.println("use NIO_fromStackOverFlow: "+(time2-time1));
}

なお、str、str1、str2にはそれぞれ同じ内容の画像を3回コピーしてリネームしたもの3画像それぞれへのパスを入れています。
コードは以下のあたりを参考にしています。

実験手順

 メモリのキャッシュとか色々あると思うので、コードにある3つの繰り返しブロックそれぞれ一つずつ、他はコメントアウトして出力を書き出しました。Eclipse Neon使用。

結果

use NIO: 175
use NIO: 22
use NIO: 22
use NIO: 20
use NIO: 21
use NIO: 20
use NIO: 20
use NIO: 20
use NIO: 20
use NIO: 19

use old IO: 91
use old IO: 11
use old IO: 7
use old IO: 8
use old IO: 8
use old IO: 8
use old IO: 8
use old IO: 8
use old IO: 9
use old IO: 9

use NIO_fromStackOverFlow: 180
use NIO_fromStackOverFlow: 21
use NIO_fromStackOverFlow: 20
use NIO_fromStackOverFlow: 22
use NIO_fromStackOverFlow: 20
use NIO_fromStackOverFlow: 20
use NIO_fromStackOverFlow: 24
use NIO_fromStackOverFlow: 20
use NIO_fromStackOverFlow: 21
use NIO_fromStackOverFlow: 18

結論

普通にImageIOから読み出して突っ込むのがいいみたいです。

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA