从ByteArrayInputStream创建BufferedImage的Java错误

时间:2010-12-27 12:59:06

标签: java stream bufferedimage

我正在尝试使用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?我是否需要在任何地方使用冲洗或关闭?

1 个答案:

答案 0 :(得分:5)

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

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