ImageIO.read(url x) slow compared to ImageIO.read(file f)



我正在制作一款需要在循环中加载图像(用于动画和其他内容)的游戏,所以我使用了以下内容:

 url = getClass().getResource("/pic/image.gif");
 pic = ImageIO.read(new File(url.getPath()));

在IDE (netbeans)上运行游戏时工作完美,但当我在构建项目后从.jar文件运行它时,它不起作用。阅读API文档,我看到ImageIO.read()函数有几个重载实现,其中一个使用url作为参数,我认为它可以帮助我解决我的问题,事实上,它做到了。

 pic = ImageIO.read( getClass().getResource("/pic/image.gif") );

问题是,它似乎需要太长时间来加载图像这种方式,使游戏变慢(不多,但它是明显的)。所以问题是:为什么使用url作为参数的函数比接收file的函数慢?

首先,你说你的游戏

需要在其循环中加载图像

我不明白这个,我不认为我同意这个前提。如果时间和性能至关重要,I/O应该总是将卸载到单独的线程。


也就是说,从URL中读取比从文件中读取需要更多的通用代码。它需要处理从离线服务器、本地文件系统上的文件下载,甚至从JAR解压缩资源。最后一个是你所经历的。

我建议重写应用程序,让而不是读取paint loop中的图像,但是如果你很懒,你也可以将资源解包到临时文件夹(预先),然后像以前一样从文件中读取。

ImageIO.setUseCache(false)在读取映像时使用内存缓存而不是磁盘缓存,也可能有助于使事情更快一些。特别是在从JAR资源加载时。

最新更新