字节数组到某种Java/Scala映像。性能注意事项
我正在编写一个FTP服务器,它接收图像,然后调整大小并上传它们 我当前的流程(伪代码)如下所示:字节数组到某种Java/Scala映像。性能注意事项,java,image,scala,Java,Image,Scala,我正在编写一个FTP服务器,它接收图像,然后调整大小并上传它们 我当前的流程(伪代码)如下所示: val imagesAsBytes: Array[Byte] = ... val bufferedImage: BufferedImage = ImageIO.read(new ByteArrayInputStream(bytes)) uploadImage(bufferedImage) 这就是要点。我忽略了调整大小,因为它不重要。基本上,我使用ImageIO模块将Array[Byte]序列化为B
val imagesAsBytes: Array[Byte] = ...
val bufferedImage: BufferedImage = ImageIO.read(new ByteArrayInputStream(bytes))
uploadImage(bufferedImage)
这就是要点。我忽略了调整大小,因为它不重要。基本上,我使用ImageIO
模块将Array[Byte]
序列化为BufferedImage
,然后调整其大小
我做了一些分析,我注意到使用ImageIO
创建BufferedImage
的速度非常慢
如果我只上传数组[Byte]
,我可以获得大约4倍的吞吐量,而不是我实际尝试将其转换为缓冲图像。我不能只上传数组[Byte]
,原因是我确实需要调整图像的大小。我没有绑定到BufferedImage
,这只是我的第一次尝试
有人知道我可以用什么方法来加速吗?是否有一种更好的格式我应该在buffereImage
上使用
我已经考虑过将尺寸调整推到一个单独的微服务上,并异步执行它,但这不是第一个版本的选项
编辑:我已经回顾了这个问题,并且意识到了这一点:ImageIO.setUseCache(false)
我建议查看更受积极支持的库(最新版本4.0,2020年2月)如下。在引擎盖下,它使用java.awt.*
。至少在出现任何问题的情况下,您将能够解决这些问题并得到解决,而且还可以使用更具“伸缩性”的API
希望有帮助。使用ImageMagic的外部程序。这有帮助吗?根据你的数字,我不认为解码一幅图像,重新采样(调整大小),最后再次编码是缓慢的(4倍)。事实上,与只复制字节相比,它的速度惊人地快。。。还是仅仅与解码相比?不管怎样,您使用的是什么文件格式?有些格式比其他格式更难进行en-/解码。