字节数组到某种Java/Scala图像.性能考虑因素

Dom*_*mra 5 java scala image

我正在编写一个接收图像的FTP服务器,然后调整大小并上传它们.

我当前的进程(伪代码)如下:

val imagesAsBytes: Array[Byte] = ...
val bufferedImage: BufferedImage = ImageIO.read(new ByteArrayInputStream(bytes))
uploadImage(bufferedImage)
Run Code Online (Sandbox Code Playgroud)

这是它的要点.我遗漏了调整大小,因为它并不重要.本质上,我将其序列Array[Byte]化为BufferedImage使用ImageIO模块,然后调整大小.

我做了一些分析,我注意到创建一个BufferedImage使用ImageIO速度非常慢.

如果我只是上传Array[Byte],我可以实现大约4倍的吞吐量,而不是我实际尝试将其转换为BufferedImage.我不能上传的原因Array[Byte]是,我确实需要调整图像大小.我没有被束缚BufferedImage,这只是我的第一次尝试.

有谁知道我可以用来加速这个的一些想法?我应该使用更好的格式BufferedImage吗?

我已经考虑过将大小调整到一个单独的微服务并异步执行它,但它不是第一个版本的选项.

编辑:我已经回顾了这个问题,并且意识到这一点:ImageIO.setUseCache(false)

tka*_*uko 1

我建议查看更积极支持的库(最新版本 4.0 于 2020 年 2 月),例如scrimage。它在幕后使用java.awt.*. 至少在出现任何问题时,您将能够解决它们并解决它们,此外还可以使用更“规模化”的 API。

希望能帮助到你。