こんにちは、メモリ内に BufferedImage インスタンスがあり、それを byte[] に変換して、パフォーマンスを考慮して I/O 操作なしで base64 文字列としてエンコードしたいと考えています。次の API を使用していました。
ByteArrayOutputStream baos = new ByteArrayOutputStream ();
ImageIO.write(image,"png",baos);
return baos.toByteArray();
ただし、この API は引き続き暗黙的にイメージを OS 一時ディレクトリに書き込みます。これは、基盤となる OS 一時ディレクトリがいっぱいで一時ファイルを作成できない場合に失敗につながります。スタックトレース:
Caused by: java.io.IOException: No space left on device
at java.io.RandomAccessFile.write(RandomAccessFile.java:493)
at javax.imageio.stream.FileCacheImageOutputStream.write(FileCacheImageOutputStream.java:134)
at javax.imageio.stream.ImageOutputStreamImpl.write(ImageOutputStreamImpl.java:66)
at com.sun.imageio.plugins.png.PNGImageWriter.write_magic(PNGImageWriter.java:376)
at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1115)
at javax.imageio.ImageWriter.write(ImageWriter.java:628)
at javax.imageio.ImageIO.write(ImageIO.java:1480)
at javax.imageio.ImageIO.write(ImageIO.java:1554)
I/O なしで変換を行う効率的な (メモリ内変換や効率的な I/O などの) 方法はありますか? お知らせ下さい。