Java-将bufferedimage转换为byte 而不写入磁盘

我正在尝试使用java在套接字上发送多个图像,但我需要一种更快的方法将图像转换为字节数组,以便我可以发送它们。 我尝试了以下代码,但它向我的C:\驱动器写了大约10,000张图像。 有没有办法在不写入磁盘的情况下进行此转换? 谢谢!

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //ImageIO.setUseCache(false); ImageIO.write(bi.getImage(), "jpg", outputStream); byte[] imageBytes = outputStream.toByteArray(); 

这应该工作:

 byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData(); 

它下面的代码非常快(几毫秒)

 import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; public byte[] toByteArray(BufferedImage image) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos); encoder.encode(image); return baos.toByteArray(); } 

尝试使用:

 ImageIO.setUseCache(false); 

在写作之前,也许这有帮助。

 BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes)); byte[] bytes = new byte[buf.capacity()]; buf.get(bytes, 0, bytes.length); 
 ByteArrayOutputStream baos; ImageIO.write(bufferedImage, "png", baos); byte[] imageBytes = baos.toByteArray(); 

使用Apache Commons IO Utils Apache Commons

IOUtils.copy(的inputStream,为OutputStream);

IO Utils API轻松支持大缓冲区