我正在读取一个包含字节数组的文件。我下载了Apache Commons IO库以使用FileUtils的方法readFileToByteArray
File file = new File("/home/username/array.txt");
FileUtils fu = new FileUtils();
byte[] array = FileUtils.readFileToByteArray(file);
我想将字节数组转换为Image。
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!
我不知道这个异常意味着什么,因此,我不知道如何修复它。 只需要提供任何可能有用的进一步信息。
由于
答案 0 :(得分:1)
获得byte[]
后,您可以使用ImageIO将其写入BufferedImage。
BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(array));
ImageIO.write(bImageFromConvert, "gif", new File("c:/test.gif"));
答案 1 :(得分:1)
该代码意味着读者无法破译图像文件上的元数据。确保正确的文件被读取并且格式正确。或者它可能期望不同的文件类型。
答案 2 :(得分:1)
我已经在this文件上尝试了您的代码,它运行正常。
array.txt
的格式是什么? readFileToByteArray()
需要二进制格式,图像阅读器会进一步期望它是GIF文件。
答案 3 :(得分:0)
没有byte []我觉得这对多部分文件传输很有用,为此我们需要apache常见的jar文件
final FileOutputStream output = new FileOutputStream("D:\\Dir\\"+ request.getParameter("imageName") + ".jpg");
IOUtils.copy(request.getPart("file").getInputStream(), output);
output.close();