IndexOutOfBounds使用Javas imageio.write()以png格式创建字节数组

时间:2012-09-03 17:44:56

标签: java exception png bytearray javax.imageio

我正在使用javax.imageio.ImageIOBufferedImage b写入字节数组,最后写入文件。创建字节数组时,10次中有1次抛出java.lang.IndexOutOfBoundsException。但是,仅通过使用相同的图像无法再现。

BufferedImage img = ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// the next line will lead to the exception being thrown
ImageIO.write(img, "png", baos);
byte[] byteArray = baos.toByteArray()

结果是:

java.lang.IndexOutOfBoundsException
Line | Method
->>  166 | seek                       in
javax.imageio.stream.FileCacheImageOutputStream
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    227 | close                      in     ''
|   1570 | write . . . . . . . . . .  in javax.imageio.ImageIO

我找到了bug report,似乎描述了同样的问题。但是,从2010年开始,我找不到修复方法。

有什么想法吗?解决?资源链接?

非常感谢帮助!

1 个答案:

答案 0 :(得分:4)

确实是bug。 但是,如果你仔细阅读报告,你会看到......

  

CUSTOMER提交的解决方法:

     

使用内存缓存。

尝试使用MemoryCacheImageOutputStream代替,直到错误被压缩

ImageIO.write(img, "png", new MemoryCacheImageOutputStream(baos));