1

我正在读取一个包含字节数组的文件。我下载了 Apache Commons IO 库以使用 FileUtils 的方法 readFileToByteArray

File file = new File("/home/username/array.txt");
FileUtils fu = new FileUtils();
byte[] array = FileUtils.readFileToByteArray(file);

我想将字节数组转换为图像。

ByteArrayInputStream bis = new ByteArrayInputStream(array);
Iterator<?> readers = ImageIO.getImageReadersByFormatName("gif");

ImageReader reader = (ImageReader) readers.next();
Object source = bis;

ImageInputStream iis = ImageIO.createImageInputStream(source);

reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();

Image image = reader.read(0, param); // this line is the problem

当代码转到引用的行时,它会抛出一个异常说

javax.imageio.IIOException: Unexpected block type 128!

我不知道这个异常意味着什么,因此,我不知道如何解决它。只需要请求任何可能有用的进一步信息。

谢谢

4

4 回答 4

1

我已经在这个文件上尝试了你的代码,它工作正常。

你的格式是array.txt什么?readFileToByteArray()需要二进制格式,您的图像阅读器会进一步认为它是 GIF 文件。

于 2013-02-18T13:27:20.397 回答
1

拥有后byte[],您可以使用ImageIO将其写入 BufferedImage。

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(array));
ImageIO.write(bImageFromConvert, "gif", new File("c:/test.gif"));
于 2013-02-18T13:19:18.783 回答
1

该代码意味着读者无法破译图像文件中的元数据。确保正在读取正确的文件并且格式正确。或者它可能期待不同的文件类型。

于 2013-02-18T13:23:32.040 回答
0

没有 byte[] 我觉得这对多部分文件传输有好处,为此我们需要 apache 通用 jar 文件

    final FileOutputStream output = new FileOutputStream("D:\\Dir\\"+ request.getParameter("imageName") + ".jpg");
        IOUtils.copy(request.getPart("file").getInputStream(), output);
        output.close();
于 2013-07-26T10:56:30.877 回答