【发布时间】:2015-07-23 00:47:02
【问题描述】:
我正在编写一个接收图像然后调整大小并上传它们的 FTP 服务器。
我目前的流程(伪代码)如下:
val imagesAsBytes: Array[Byte] = ...
val bufferedImage: BufferedImage = ImageIO.read(new ByteArrayInputStream(bytes))
uploadImage(bufferedImage)
这就是它的要点。我省略了调整大小,因为它不重要。本质上,我使用ImageIO 模块将Array[Byte] 序列化为BufferedImage,然后调整其大小。
我做了一些分析,我注意到使用ImageIO 创建BufferedImage 非常慢。
如果我只上传 Array[Byte],我可以实现大约 4 倍的吞吐量,而不是我实际尝试将其转换为 BufferedImage。我不能只上传Array[Byte] 的原因是我确实需要调整图像大小。我没有绑定BufferedImage,这只是我的第一次尝试。
有谁知道我可以用来加快速度的一些想法吗?我应该在BufferedImage 上使用更好的格式吗?
我已经考虑过将调整大小推送到单独的微服务并异步执行,但这不是第一个版本的选项。
编辑:我已经查看了this 问题,并且知道这一点:ImageIO.setUseCache(false)
【问题讨论】:
-
根据您的数字,我不认为解码图像,重新采样(调整大小),最后再次编码可以被认为是慢(4x)。实际上,与仅复制字节相比,它的速度惊人地快……还是仅与解码相比?无论如何,您使用的是什么文件格式?有些格式比其他格式更难编码/解码。