Подтвердить что ты не робот

Java-Convert bufferedimage to byte [] без записи на диск

Я пытаюсь отправить несколько изображений через сокет с помощью java, но мне нужен более быстрый способ конвертировать изображения в массив байтов, чтобы я мог их отправлять. Я попробовал следующий код, но он написал около 10 000 изображений на мой диск C: \. Есть ли способ сделать это преобразование без записи на диск? Спасибо!

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

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

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

Ответ 1

Это должно работать:

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

Ответ 2

Попробуйте использовать:

ImageIO.setUseCache(false);

Прежде чем писать, возможно, это помогает.

Ответ 3

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

Ответ 4

Код ниже он очень быстрый (несколько миллисекунд)

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

Ответ 5

Использование Apache Commons IO Utils Apache Commons

IOUtils.copy(InputStream, OutputStream);

IO Utils API поддерживает большие буферы легко