boolean resizeFlag = base64Img.length() > 200 * 1024; try { while (resizeFlag) { BufferedImage src = base64Str2BufferedImage(base64Img); BufferedImage output = Thumbnails.of(src).size(src.getWidth() * 4 / 5, src.getHeight() * 4 / 5).asBufferedImage(); base64Img = imageToBase64(output); resizeFlag = base64Img.length() > 200 * 1024; } return base64Img; } catch (Exception e) { return base64Img; }避免内存溢出
时间: 2024-02-14 16:10:17 浏览: 20
为了避免在图片压缩过程中出现内存溢出的问题,可以尝试以下优化措施:
1. 使用 InputStream 和 OutputStream 进行缓冲:可以将图片数据读取和写入的过程使用 BufferedInputStream 和 BufferedOutputStream 进行缓冲,避免频繁的读写操作。
2. 使用 ByteArrayInputStream 和 ByteArrayOutputStream 进行内存缓存:可以将 BufferedImage 转换为 ByteArrayInputStream 进行内存缓存,避免频繁的内存操作。
3. 增加 JVM 内存限制:可以通过设置 JVM 的内存限制参数,提高 JVM 的内存使用量,避免内存溢出的问题。
优化后的代码如下:
```
boolean resizeFlag = isNeedResize(base64Img);
try {
do {
BufferedImage src = base64Str2BufferedImage(base64Img);
ByteArrayOutputStream os = new ByteArrayOutputStream();
Thumbnails.of(src).size(src.getWidth() * 4 / 5, src.getHeight() * 4 / 5).toOutputStream(os);
base64Img = Base64.getEncoder().encodeToString(os.toByteArray());
} while (isNeedResize(base64Img));
return base64Img;
} catch (Exception e) {
return base64Img;
}
private static boolean isNeedResize(String base64Img) {
return base64Img.length() > 200 * 1024;
}
```
通过以上优化,可以有效避免内存溢出问题,提高代码的执行效率和稳定性。