我试图通过使用套接字的java发送多张图片,但我需要将图像转换为字节数组,所以我可以给他们一个更快的方法。 我试着下面的代码,但它写了大约10,000图片到我的C:\驱动器。 有没有一种方法,使这种转换不写入磁盘? 谢谢!
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下议院IO utils的Apache的百科全书
IOUtils.copy(的inputStream,为OutputStream);
IO utils的API轻松地支持大的缓冲区