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 始终为空。输入流是有效的(因为我之前使用它来获取图像格式)。什么可能使 ImageIO 返回 null?我需要在任何地方使用冲洗或关闭吗?

4

1 回答 1

5

您的调用会getFormatName 消耗 inputStream,因此流指针位于字节数组的末尾。任何从该流中读取的尝试都会表明它位于“文件”的末尾。在将流交给 ImageIO.read() 方法之前,您需要重置流(或创建一个新流):

String format = getFormatName(new ByteArrayInputStream(imageData));
BufferedImage img = ImageIO.read(new ByteArrayInputStream(imageData));
于 2010-12-27T13:03:34.377 回答