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)方式进行转换?请指教.
解决方法
ImageIO.setUseCache(false);
默认情况下,它是根据javadoc:
Sets a flag indicating whether a disk-based cache file should be used when creating ImageInputStreams and ImageOutputStreams.
When reading from a standard InputStream>,it may be necessary to save prevIoUsly read information in a cache since the underlying stream does not allow data to be re-read. Similarly,when writing to a standard OutputStream,a cache may be used to allow a prevIoUsly written value to be changed before flushing it to the final destination.
The cache may reside in main memory or on disk. Setting this flag to false disallows the use of disk for future streams,which may be advantageous when working with small images,as the overhead of creating and destroying files is removed.
On startup,the value is set to true.