2

a をバイト配列javax.imageio.ImageIOに書き込み、最後にファイルに書き込むために使用しています。BufferedImage bバイト配列の作成時に 10 回に 1 回、ajava.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

同じ問題を説明しているように見えるバグレポートを見つけました。しかし、それは2010年からのものですが、修正を見つけることができません.

何か案は?回避策はありますか? リソースへのリンク?

ヘルプは大歓迎です!

4

1 に答える 1

5

それは確かにバグです。ただし、レポートを読むと、次のことがわかります...

顧客が提出した回避策:

メモリキャッシュを使用します。

バグが最終的にMemoryCacheImageOutputStream潰されるまで、代わりに利用してみてください。

ImageIO.write(img, "png", new MemoryCacheImageOutputStream(baos));
于 2012-09-03T18:29:33.737 に答える