我正在尝试使用java在套接字上发送多个图像,但我需要一种更快的方法将图像转换为字节数组,以便我可以发送它们。我尝试了以下代码,但它向我的C:\驱动器写了大约10,000张图像。有没有办法在不写入磁盘的情况下进行此转换?谢谢!
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//ImageIO.setUseCache(false);
ImageIO.write(bi.getImage(), "jpg", outputStream);
byte[] imageBytes = outputStream.toByteArray();
答案 0 :(得分:43)
这应该有效:
byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
答案 1 :(得分: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();
}
答案 2 :(得分:1)
尝试使用:
ImageIO.setUseCache(false);
在写作之前,也许这有帮助。
答案 3 :(得分:0)
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);
答案 4 :(得分:0)
ByteArrayOutputStream baos;
ImageIO.write(bufferedImage, "png", baos);
byte[] imageBytes = baos.toByteArray();
答案 5 :(得分:-2)
使用Apache Commons IO Utils Apache Commons
IOUtils.copy(的inputStream,为OutputStream);
IO Utils API轻松支持大缓冲区