ImageIO.read(InputStream)返回null问题

在处理图片上传时,发现ImageIO.read(InputStream)方法在处理某些File对象时返回null。问题出在ImageIO.read依赖于ImageReader读取InputStream,而 FileInputStream仅提供字节码,缺少文件类型信息。解决方案是修改代码,使其同时支持File和InputStream参数,确保正确读取图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ImageIO.read(InputStream)返回null问题

问题背景

在上传图片的时候,ImageIO.read(InputStream)能够正常读取图片,代码如下

//org.springframework.web.multipart.MultipartFile uploadFile
InputStream input = uploadFile.getInputStream();
BufferedImage source = ImageIO.read(input);

PS:这里可以直接使用ImageIO.read(file),但是由于图片压缩我们封装了一层,只支持InputStream的入参

但是使用File文件的时候,却返回null。文件确实是图像文件,并且能够正常读取

InputStream input = new FileInputStream(file)
BufferedImage source = ImageIO.read(input);

原因和解决方案

我参考了这篇文章:https://stackoverflow.com/questions/34308211/imageio-read-cant-read-bytearrayinputstream-image-processing

Returns a BufferedImage as the result of decoding a supplied InputStream with an ImageReader chosen automatically from among those currently registered. The InputStream is wrapped in an ImageInputStream. If no registered ImageReader claims to be able to read the resulting stream, null is returned. 

原因在于ImageIO.read是根据文件的类型来读取图片的,使用了FileInputStream后仅仅获取了文件的字节码,并不包含文件的信息,因而返回null。其中ImageReader负责读取InputStream,如果没有注册的ImageReader声称能够读取结果流,则返回null

解决方案:修改入参,同时支持File和InputStream入参

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值