我的ImageIO.write ByteArrayOutputStream为什么这么慢?

博客主要讨论了在使用ImageIO.write方法将BufferedImage写入ByteArrayOutputStream时遇到的性能问题,发现在Linux环境下,该操作导致接口响应时间长达1.7秒。通过分析源代码,发现是由于FileCacheImageOutputStream的缓存机制在处理小数据时效率低下。作者尝试将输出流更改为File,性能显著提升至400ms。结论是对于此类场景,直接写入文件再转换为base64是更好的选择。
摘要由CSDN通过智能技术生成

问题来源:

      1.系统生成二维码,需要不同的图片格式来适应客户端要求

      2.图片通过接口模式给客户端,最终使用base64来传递

 

平常思考模式:

     1.BufferedImage首先通过工具把数据生成出来。

     2.我绝对不会把这个BufferedImage写磁盘,直接放内存ByteArrayOutputstream后转base64岂不是更快?

     3.ImageIO.write正好有个write(BufferedImage img,String format,OutputStream output)

     4.真的舒服,我就用它了!

 

实际情况:

    1.Linux环境centos6.8 虚拟化环境

    2.JRE1.8

    3.接口工作流程:(1) 生成BufferedImage (2) BufferedImage通过ImageIO.write(BufferedImage,"png",ByteArrayOutputStream out) (3)将ByteArrayOutputStream转化为base64 (4) 接口返回

    4.一个普通的链接,生成二维码并返回base64,接口耗时1.7S

    5.png图片大小16K

 

分析问题&尝试更换接口:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值