Java 为什么ImageIO.read()比Toolkit.getDefaultToolkit().getImage()慢?

Java 为什么ImageIO.read()比Toolkit.getDefaultToolkit().getImage()慢?,java,image,javax.imageio,Java,Image,Javax.imageio,我使用ImageIO.read()从磁盘获取一些JPEG文件,但速度太慢了。。。读取每个文件需要250毫秒,而Toolkit.getDefaultToolkit().getImage()需要不到10毫秒(实际上在我的测试中显示为0毫秒) 现在我问自己:如果Toolkit.getDefaultToolkit().getImage()如此之快,为什么ImageIO.read()如此之慢 这非常快,但不会返回BuffereImage: Image image = Toolkit.getDefault

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

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


这非常快,但不会返回BuffereImage:

Image image = Toolkit.getDefaultToolkit().getImage(f.getAbsolutePath());
这很慢(读取2.3MB 3264x1840 JPEG文件大约需要250毫秒):

一般来说,不是这样

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

这就是为什么您有
MediaTracker#waitForAll
MediaTracker#waitForID
ImageObserver
。这将监控由
Toolkit.getDefaultToolkit().getImage()
创建的映像加载过程的状态,以便他们知道映像加载何时完成…

通常情况下不会

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


这就是为什么您有
MediaTracker#waitForAll
MediaTracker#waitForID
ImageObserver
。这都会监视由
Toolkit.getDefaultToolkit().getImage()
创建的映像加载过程的状态,以便它们知道映像加载何时完成…

Hm。。。你确定?如果是,如何对ImageIO.read()执行相同的操作?将
ImageIO.read
包装到单独的线程中。这意味着,在
ImageIO.read
之前,您不会有任何图像数据……是的,您是对的。如果我在调用getImage()之后尝试检查图像的大小,则图像未完全加载。Hm。。。你确定?如果是,如何对ImageIO.read()执行相同的操作?将
ImageIO.read
包装到单独的线程中。这意味着,在
ImageIO.read
之前,您不会有任何图像数据……是的,您是对的。如果在调用getImage()之后尝试检查图像的大小,则图像未完全加载。
BufferedImage image = ImageIO.read(f);