java ImageIO.read 图片处理

叁滴水
博客专家认证
2019-10-15 09:00:44
在使用ImageIO.read 进行图片处理的时候, 感觉内存一直在涨,始终无法释放


@RequestMapping(value = "/test")
@ResponseBody
public Result<Object> faceAdd() {
try {
File f = new File("C:\\Users\\Administrator\\Desktop\\1.png");
try{
ImageInfo imageInfo = ImageUtil.getRGBData(f);
logger.info("识别:"+f.getName());
}catch (Exception e){
logger.error("识别:"+f.getName()+"失败");
}
return Results.newSuccessResult("");
} catch (Exception e) {
logger.error("", e);
}finally {
}
return Results.newFailedResult(ErrorCodeEnum.UNKNOWN);
}


   public static ImageInfo getRGBData(File file) {
if (file == null)
return null;
ImageInfo imageInfo;
try {
//将图片文件加载到内存缓冲区
BufferedImage image = ImageIO.read(file);
image.flush();
} catch (IOException e) {
e.printStackTrace();
return null;
}
return null;
}



一个纯净的spring boot 工程 刚刚启动大概占用内从200 M ,循环1000次这个方法后, 就上G了,然后一直涨
希望大佬帮帮我
...全文
454 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
米德文特 2020-02-24
  • 打赏
  • 举报
回复
首先你返回了什么看不出来,ImageInfo这个实体类,到底有没有包含整张图片的byte[]数据,还是只包含一些长宽啊,File路径啊之类的信息。如果包含了整张图片,那么检查这个方法外层,调用者有没有把返回的对象给存进什么列表里。
如果没有包含,那么你改为:
FileInputStream fis=null;
try {
fis = new FileInputStream(f);
ImageIO.read(fis);
} catch (Exception e) {
throw e;
} finally {
CloseUtil.close(fis);
}


其中 CloseUtil.close(fis)方法:
public class CloseUtil {
public static void close(Closeable... closeables) {
if (closeables == null) {
return;
}
for (Closeable closeable : closeables) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
}
}
}
}
}

把流关干净,释放文件。
叁滴水 2019-10-17
  • 打赏
  • 举报
回复
试了, 没用。
叁滴水 2019-10-16
  • 打赏
  • 举报
回复
顶贴
Soinice 2019-10-16
  • 打赏
  • 举报
回复
.dispose()

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧