ImageIO.read(url x) 比 ImageIO.read(文件 f) 慢
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
的函数慢?
首先:你说你的游戏
needs to load images inside its loop
我不明白这个,我不认为我同意这个前提。
如果时间和性能至关重要,I/O 应该 总是 卸载到单独的线程。
也就是说,从 URL 中读取比从文件中读取需要更通用的代码。它需要处理从异地服务器下载、本地文件系统上的文件,甚至从 JAR 解压缩资源。最后一个是你的经历。
我建议将应用程序重写为 不 在绘画循环中读取图像,但如果你懒惰,你也可以将资源解压缩到一个临时文件夹(预先) 并像以前一样从文件中读取。
ImageIO.setUseCache(false)
也可能有助于加快速度,方法是在读取图像时使用内存缓存而不是磁盘缓存。特别是从 JAR 资源加载时。
我正在制作一个需要在其循环中加载图像的游戏(用于动画和其他东西),所以我使用了这个:
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
的函数慢?
首先:你说你的游戏
needs to load images inside its loop
我不明白这个,我不认为我同意这个前提。 如果时间和性能至关重要,I/O 应该 总是 卸载到单独的线程。
也就是说,从 URL 中读取比从文件中读取需要更通用的代码。它需要处理从异地服务器下载、本地文件系统上的文件,甚至从 JAR 解压缩资源。最后一个是你的经历。
我建议将应用程序重写为 不 在绘画循环中读取图像,但如果你懒惰,你也可以将资源解压缩到一个临时文件夹(预先) 并像以前一样从文件中读取。
ImageIO.setUseCache(false)
也可能有助于加快速度,方法是在读取图像时使用内存缓存而不是磁盘缓存。特别是从 JAR 资源加载时。