DirectBuffer для ускорения ImageIO - PullRequest
1 голос
/ 14 марта 2019

У меня много операций, связанных с созданием объекта BufferedImage с использованием сторонней библиотеки и сохранением его в файл jpg. Иногда одна обработка может иметь более 10000 таких сбережений. В настоящее время я использую ImageIO.write(image, "jpg", file) напрямую, но производительность не очень удовлетворительная.

Мне интересно, могу ли я использовать прямой ByteBuffer для ускорения записи на диск? Я думаю о том, чтобы поместить BufferedImage в прямой ByteBuffer и, наконец, сохранить на диск с помощью FileChannel. Я не нашел способ сделать это. Интересно, как я могу поместить BufferedImage для прямого ByteBuffer? Некоторый пример кода очень поможет.

1 Ответ

0 голосов
/ 14 марта 2019
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();
}

Из этого ответа попробуйте это. Должно быть быстрее.

...