我正在尝试使用ByteArrayInputStream创建BufferedImage:
byte[] imageData = getData(imageFile); // returns file as byte[]
InputStream inputStream = new ByteArrayInputStream(imageData);
String format = getFormatName(inputStream);
BufferedImage img = ImageIO.read(inputStream);
但是img总是空的。输入流有效(因为我之前使用它来获取图像格式)。 是什么让ImageIO返回null?我是否需要在任何地方使用冲洗或关闭?
答案 0 :(得分:5)
您对getFormatName
的调用会消耗inputStream ,因此流指针位于字节数组的末尾。任何尝试从该流中读取都会告诉它它位于'文件'的末尾。在将流传递给ImageIO.read()方法之前,您需要重置流(或创建一个流):
String format = getFormatName(new ByteArrayInputStream(imageData));
BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageData));