为什么BufferedImage的初始化速度比Image快

时间:2013-04-26 10:16:04

标签: java image bufferedimage

我正在为我用Java编写的关于图像的项目运行一些测试。我得到了一个有趣的结果,无法弄清楚为什么。以下是BufferedImageImage的初始化行。

File[] files = new File("C:\\Users\\SAMSUNG\\Desktop\\img\\").listFiles();
time = System.currentTimeMillis();
for (File f:files){
    Image img = ImageIO.read(f);
}
System.out.println((System.currentTimeMillis() - time) + " miliseconds.");

请注意:这两项操作分别运行。我运行上面的一个,进程结束,我的意思是实际上被杀死了,而不是我运行下面的一个。

File[] files = new File("C:\\Users\\SAMSUNG\\Desktop\\img\\").listFiles();  
time = System.currentTimeMillis();
for (File f:files){
    BufferedImage bimg = ImageIO.read(f);
}
System.out.println((System.currentTimeMillis() - time) + " miliseconds.");

我知道在运行中运行这些可能会影响结果,因为我尝试访问相同的文件,因为我单独运行它们。结果接近40分钟。但是,BufferedImage初始化总是比Image初始化快一分钟。那是为什么?

我运行测试三次,结果是一样的。

2 个答案:

答案 0 :(得分:7)

时代应该是一样的。我怀疑你的第一个循环是用文件的内容来预热一些缓存,第二个循环有更简单的时间。

尝试撤消阅读顺序:先BufferedImages,然后Images,然后检查会发生什么

答案 1 :(得分:0)

首先,确保你做了不止一次这样的测试(即将整个循环粘在一个循环中),其次使用System.NanoTime,因为它的方式更准确,第三,正如另一张海报建议的那样,尝试改变执行命令或独立运行(可能是最安全的方式)。