Как сохранить массив байтов в виде файла образа на диске?

У меня есть представление байтового массива изображения. Как сохранить его на диске в качестве файла изображения.

Я уже сделал это

OutputStream out = new FileOutputStream("a.jpg");
out.write(byteArray);
out.flush();
out.close();

Но когда я открываю изображение, дважды щелкнув его, он не покажет никакого изображения.

Ответ 1

Кроме того, что вы не используете блок try/finally (по крайней мере, в коде, который вы указали), это должно быть хорошо. (Кстати, вам не нужно очищать выходной поток, если вы его закрываете.)

Поскольку он не работает, предложение byteArray фактически не содержит JPEG-кодированного изображения. Как вы создали byteArray для начала? Если это "сырое" представление, вы, вероятно, захотите его закодировать, например. используя пакет javax.imageio.

Ответ 2

Вы можете использовать класс FileOutputStream:

FileOutputStream fos = new FileOutputStream("image.jpg");
try {
    fos.write(someByteArray);
}
finally {
    fos.close();
}

Ответ 3

Вы можете использовать ImageIO API.

Детали могут быть немного волосатыми, но сначала вы, вероятно, захотите создать BufferedImage с использованием типа TYPE_BYTE_INDEXED и некоторого подходящего экземпляра IndexColorModel. Затем поместите свой массив байтов. Подсказка: вы можете получить внутреннее представление BufferedImage с помощью:

myDataBuffer = myBufferedImage.getRaster().getDataBuffer();

Скорее всего, вернет буфер данных типа DataBufferByte (check!), из которого вы получите массив байтов с

myByteArray = ((DataBufferByte) myDataBuffer).getData();

Затем вы можете использовать System.arraycopy для копирования массива байтов на него.