主要实现:使用ImageIO把BufferedImage写入到ByteArrayOutputStream输出流,从输出流取出字节数组进行网络传输。
问题:
1、少量比如10个线程调用的时候特别快大概只要几十ms;
2、并发200个线程调用的时候就很慢,就是逐渐增加的那种,一些是几十ms,一些是几百ms,一些是几千ms;
3、做了些时间截点,发现就是调用ByteArrayOutputStream的时候花费的时间多,本来是IO的流,我想换成NIO,但搜了一圈发现没有把用java生成图片转换到NIO流的。
代码:
BufferedImage bufImg = qRcodeCommon(contentBytes,size);
long startTime=System.currentTimeMillis();
try {
ImageIO.write(bufImg, imgType, bos);//缓存输出流接收生成的图片字节数组
BASE64Encoder encoder=new BASE64Encoder();
//System.out.println(encoder.encodeBuffer(bos.toByteArray()));
String str=encoder.encodeBuffer(bos.toByteArray());
bos.reset();
System.out.println("写出数组:"+(System.currentTimeMillis()-startTime)+"ms");
return str;
}catch (IOException e){
e.printStackTrace();
System.out.println("缓存图片出现IO异常");
}
缩短时间,提高性能,各位大佬帮忙看看!