【发布时间】:2016-11-07 15:12:06
【问题描述】:
所以我正在尝试从流中获取 PNG 图像。
image = ImageIO.read(inputStream);
这段代码运行了十秒钟!我以为问题出在 InputStream 慢,所以我尝试先将其加载到缓冲区中。
byte[] bytes = inputStreamToBytes(inputStream);
image = ImageIO.read(new ByteArrayInputStream(bytes));
你猜怎么着!将它从 InputStream 加载到缓冲区大约需要 100 毫秒,但是从字节数组中读取它需要很多时间!十(十)秒阅读!从内存!
我在树莓派上做。是的,我知道这是一个玩具,而不是真正的电脑。所以我试着在我的 MacBook Air 上做这件事。真的,两秒比十秒好。但是对于一些 800x600 PNG 来说仍然很多。那为什么会这样呢?又该怎么办?
【问题讨论】:
-
Java 的 ImageIO 对每个人来说都太慢了……我怀疑你做错了什么。
-
^ 这是一个大胆的声明。但是,您能否提供(上传)您尝试加载的文件?它似乎有些具体,但要验证这一点:对于每张任意、随机、800x600 的图像,还是仅对于这个特定的图像,它是否如此缓慢? (也许它有一些奇怪的、不寻常的格式、压缩类型等等......)
-
@Marco13 ImageIO 确实以莫名其妙的缓慢着称,即使在检查了源代码之后也是如此。
-
这是“adb shell screencap -p”的截图
-
你做错了。 ;-) 默认情况下,ImageIO 使用磁盘缓存,即使从内存中的输入流中读取...尝试使用
ImageIO.setUseCache(false)来获得“免费”速度提升。
标签: java inputstream javax.imageio