Witam mam instancję BufferedImage w pamięci i chcesz przekonwertować go na byte [], aby kodować jako base64 ciąg bez operacji I/O do rozpatrzenia wydajności. Używałem następujący API:Konwersja BufferedImage do byte [] bez I/O
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image,"png",baos);
return baos.toByteArray();
to jednak API nadal domyślnie zapisuje obraz do katalogu OS temp, co doprowadzi do awarii w przypadku, gdy bazowy katalog OS temp jest pełny oraz plik tymczasowy nie może być stworzony. stosu Ślad:
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)
Czy istnieje skuteczny (jak przemiany w pamięci lub efektywnego I/O) sposób to zrobić bez konwersji I/O? Proszę doradź.
jestem .. Zaskoczony, że tak się dzieje. –
Jest to prawie na pewno błąd w JVM. Czy wypróbowałeś najnowszą wersję? –
@PeterLawrey: dlaczego uważasz, że to błąd? Istnieje cała klasa ["FileCacheImageOutputStream"] (http://docs.oracle.com/javase/7/docs/api/javax/imageio/stream/FileCacheImageOutputStream.html). Jednak w ogóle nie wiedziałem o tym mechanizmie w "ImageIO". –