Java 为什么ImageIO.read()速度这么慢?

Java 为什么ImageIO.read()速度这么慢?,java,inputstream,javax.imageio,Java,Inputstream,Javax.imageio,所以我试图从流中获取PNG图像 image = ImageIO.read(inputStream); 这段代码运行了10秒钟!我认为问题出在慢输入流中,所以我尝试先将其加载到缓冲区中 byte[] bytes = inputStreamToBytes(inputStream); image = ImageIO.read(new ByteArrayInputStream(bytes)); 猜猜看!从InputStream加载到缓冲区大约需要100毫秒,但是从字节数组读取它需要很多时间!十(十)

所以我试图从流中获取PNG图像

image = ImageIO.read(inputStream);
这段代码运行了10秒钟!我认为问题出在慢输入流中,所以我尝试先将其加载到缓冲区中

byte[] bytes = inputStreamToBytes(inputStream);
image = ImageIO.read(new ByteArrayInputStream(bytes));
猜猜看!从InputStream加载到缓冲区大约需要100毫秒,但是从字节数组读取它需要很多时间!十(十)秒阅读!一只公羊


我用树莓皮做的。是的,我知道这是一个玩具,不是真正的电脑。所以我试着在我的MacBookAir上做。真的,两秒钟比十秒钟好。但对于一些800x600 PNG仍然有很多。为什么会这样?该怎么办呢?

您可能需要安装Java本机IO库—默认情况下它们没有安装


如果你没有安装这个库,那么所有对图像的操作都是用java执行的,而不是本机执行的。

java的ImageIO对每个人来说都非常慢。。。我怀疑你做错了什么。^这是一个大胆的说法。但是,您能否提供(上载)您尝试加载的文件?这似乎有点具体,但要验证这一点:对于每个任意的、随机的800x600图像来说,速度是如此之慢,还是仅对这个特定的图像而言?(可能它有一些奇怪的、不寻常的格式、压缩类型等等…@Marco13 ImageIO确实有一个令人费解的慢的名声,即使在检查了源代码之后也是如此。这是“adb shell screencap-p”的截图,你做错了。;-)默认情况下,ImageIO使用磁盘缓存,即使从内存中的输入流读取。。。尝试使用获得“免费”的速度提升。虽然JAI(使用本机编解码器,如本例中的libpng)在某些情况下可能有所帮助,但我怀疑JAI是否为Raspberry Pi提供了预构建的本机二进制文件。JAI已经好几年没有开发了。为libpng创建自己的JNI接口可能是更好的选择。OpenJDK是否包含本机IO?@user1748526 JPEG编码/解码使用本机代码(libJPEG)。不是本地的。就我所知