Java的转换的BufferedImage为byte []没有写入磁盘(Java- Convert

2019-06-23 19:22发布

我试图通过使用套接字的java发送多张图片,但我需要将图像转换为字节数组,所以我可以给他们一个更快的方法。 我试着下面的代码,但它写了大约10,000图片到我的C:\驱动器。 有没有一种方法,使这种转换不写入磁盘? 谢谢!

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

                    //ImageIO.setUseCache(false);
                    ImageIO.write(bi.getImage(), "jpg", outputStream);

                    byte[] imageBytes = outputStream.toByteArray();

Answer 1:

这应该工作:

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


Answer 2:

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

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();
}


Answer 3:

尝试使用:

ImageIO.setUseCache(false);

之前写的,也许有帮助。



Answer 4:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);


Answer 5:

ByteArrayOutputStream baos;
ImageIO.write(bufferedImage, "png", baos);
byte[] imageBytes = baos.toByteArray();


Answer 6:

使用Apache下议院IO utils的Apache的百科全书

IOUtils.copy(的inputStream,为OutputStream);

IO utils的API轻松地支持大的缓冲区



文章来源: Java- Convert bufferedimage to byte[] without writing to disk