从ByteArrayInputStream创建BufferedImage时出现Java错误

4
我正在尝试使用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始终为null。输入流是有效的(因为我之前使用它来获取图像格式)。 是什么导致ImageIO返回null?我需要在任何地方使用flush或close吗?

1个回答

5

您调用的getFormatName方法会消耗输入流,所以流指针将位于字节数组的末尾。任何试图从该流中读取数据的操作都会提示已到达“文件”末尾。在将其传递给ImageIO.read()方法之前,需要重置该流(或创建一个新流):

String format = getFormatName(new ByteArrayInputStream(imageData));
BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageData));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接