26

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

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

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

                    byte[] imageBytes = outputStream.toByteArray();
4

6 回答 6

52

这应该有效:

byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
于 2012-04-20T13:26:24.860 回答
5

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

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();
}
于 2016-04-07T14:46:51.170 回答
4
ByteArrayOutputStream baos;
ImageIO.write(bufferedImage, "png", baos);
byte[] imageBytes = baos.toByteArray();
于 2018-07-20T04:13:06.983 回答
2

尝试使用:

ImageIO.setUseCache(false);

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

于 2012-04-20T13:28:29.163 回答
1
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);
于 2012-04-20T13:28:44.537 回答
0

使用 Apache Commons IO Utils Apache Commons

IOUtils.copy(inputStream,outputStream);

IO Utils API轻松支持大缓冲区

于 2012-04-20T13:26:52.243 回答