我使用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);
答案 0 :(得分:4)
一般情况下不是。
ImageIO
在调用它的同一个线程上下文中读取图像,Toolkit.getDefaultToolkit().getImage()
使用单独的背景Thread
加载图像并立即返回(几乎)。
这就是MediaTracker#waitForAll
和MediaTracker#waitForID
以及ImageObserver
的原因。这一切都监视由Toolkit.getDefaultToolkit().getImage()
创建的图像加载过程的状态,以便在图像加载完成时知道...