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

flu*_*xon 2 java png bytearray exception javax.imageio

javax.imageio.ImageIO用来将a BufferedImage b写入字节数组,最后写入文件。创建字节数组时,十分之十java.lang.IndexOutOfBoundsException会抛出a。但是,仅使用相同的图像是无法复制的。

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()
Run Code Online (Sandbox Code Playgroud)

结果是:

java.lang.IndexOutOfBoundsException
Line | Method
->>  166 | seek                       in
javax.imageio.stream.FileCacheImageOutputStream
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|    227 | close                      in     ''
|   1570 | write . . . . . . . . . .  in javax.imageio.ImageIO
Run Code Online (Sandbox Code Playgroud)

我发现了一个错误报告,似乎描述了同样的问题。但是我找不到修复程序,尽管它来自2010年。

有任何想法吗?工作环境?链接到资源?

非常感谢您的帮助!

old*_*inb 5

确实是一个错误。不过,如果您仔细阅读报告,将会看到...

客户提交的解决方法:

使用内存缓存。

尝试利用MemoryCacheImageOutputStream替代方法,直到最终解决了该错误。

ImageIO.write(img, "png", new MemoryCacheImageOutputStream(baos));
Run Code Online (Sandbox Code Playgroud)