Ответ 1
Это должно работать:
byte[] imageBytes = ((DataBufferByte) bufferedImage.getData().getDataBuffer()).getData();
Я пытаюсь отправить несколько изображений через сокет с помощью 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();
Попробуйте использовать:
ImageIO.setUseCache(false);
Прежде чем писать, возможно, это помогает.
BufferedImage img = ImageIO.read(new ByteArrayInputStream(bytes));
byte[] bytes = new byte[buf.capacity()];
buf.get(bytes, 0, bytes.length);
Код ниже он очень быстрый (несколько миллисекунд)
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();
}
Использование Apache Commons IO Utils Apache Commons
IOUtils.copy(InputStream, OutputStream);
IO Utils API поддерживает большие буферы легко