Преобразование BufferedImage в byte[] без ввода-вывода

Привет, у меня есть экземпляр BufferedImage в памяти, и я хочу преобразовать его в byte[] для кодирования в виде строки base64 без операций ввода-вывода для повышения производительности. Я использовал следующий API :

ByteArrayOutputStream baos = new ByteArrayOutputStream ();
ImageIO.write(image,"png",baos);
return baos.toByteArray();

. Однако этот API по-прежнему неявно записывает образ во временный каталог ОС, что приведет к сбою в случае, если базовый временный каталог ОС заполнен и временный файл не может быть создан. Трассировка стека:

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)

Существует ли эффективный (способ преобразования памяти, подобный -, или эффективный способ ввода-вывода )для выполнения преобразования без ввода-вывода? Пожалуйста, порекомендуйте.

11
задан Daniel A. White 19 April 2012 в 19:52
поделиться