Hola Tengo una instancia de BufferedImage en la memoria y quiero convertirla en byte [] para codificar como serie base64 sin operación de E/S para la consideración del rendimiento. Yo estaba usando la siguiente API:Convertir imagen Buffered en byte [] sin I/O
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image,"png",baos);
return baos.toByteArray();
Sin embargo, esta API todavía escribe implícitamente la imagen en el directorio OS temperatura, lo que dará lugar a un fallo en el caso de que el directorio OS temp subyacente es completa y el archivo temporal no puede ser creado. Seguimiento de la pila:
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)
¿Hay una (como la conversión en memoria o eficiente de E/S) de manera eficiente para hacer la conversión sin E/S? Por favor avise.
soy .. .se sorprendió de que esto sucediera. –
Esto es casi seguro un error en la JVM. ¿Has probado la última versión? –
@PeterLawrey: ¿por qué consideras esto un error? Hay toda una clase ['FileCacheImageOutputStream'] (http://docs.oracle.com/javase/7/docs/api/javax/imageio/stream/FileCacheImageOutputStream.html). Sin embargo, no estaba al tanto de este mecanismo en 'ImageIO' en absoluto. –