与Toolkit.getDefaultToolkit()。getImage()相比,为什么ImageIO.read()这么慢?

时间:2014-02-24 01:07:26

标签: java image javax.imageio

我使用ImageIO.read()从磁盘中获取一些JPEG文件,但速度太慢......读取每个文件需要250ms,而Toolkit.getDefaultToolkit()。getImage()需要不到10ms(实际上它在我的测试中显示0ms)!

现在我问自己:如果Toolkit.getDefaultToolkit()。getImage()如此之快,为什么ImageIO.read()会这么慢?


这超级快,但不会返回BufferedImage:

Image image = Toolkit.getDefaultToolkit().getImage(f.getAbsolutePath());

这很慢(读取2.3MB 3264x1840 JPEG文件约250ms):

BufferedImage image = ImageIO.read(f);

1 个答案:

答案 0 :(得分:4)

一般情况下不是。

ImageIO在调用它的同一个线程上下文中读取图像,Toolkit.getDefaultToolkit().getImage()使用单独的背景Thread加载图像并立即返回(几乎)。

这就是MediaTracker#waitForAllMediaTracker#waitForID以及ImageObserver的原因。这一切都监视由Toolkit.getDefaultToolkit().getImage()创建的图像加载过程的状态,以便在图像加载完成时知道...