如何将字节数组存储为磁盘上的映像文件?

时间:2010-01-26 11:00:14

标签: java image io bytearray

我有一个Image的字节数组表示。如何将其作为图像文件保存在磁盘上。

我已经完成了这个

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

但是当我通过双击打开图像时,它不会显示任何图像。

3 个答案:

答案 0 :(得分:8)

您可以使用FileOutputStream类:

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

答案 1 :(得分:8)

除了未使用try / finally块(至少在您显示的代码中)之外,应该没问题。 (顺便说一下,如果要关闭输出流,则不需要刷新输出流。)

由于它不起作用,这表明byteArray 实际不包含JPEG编码的图像。你是如何创建byteArray的?如果它是“原始”表示,您可能想要对其进行编码,例如使用javax.imageio包。

答案 2 :(得分:3)

您可以使用ImageIO API

细节可能有点毛茸茸,但首先你可能想要使用TYPE_BYTE_INDEXED类型和一些合适的IndexColorModel实例创建一个BufferedImage。然后把你的字节数组放在那里。提示:您可以通过以下方式获取BufferedImage的内部表示:

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

哪个可能会返回DataBufferByte类型的数据缓冲区(check!),从中获取带

的字节数组
myByteArray = ((DataBufferByte) myDataBuffer).getData();

然后你可以使用System.arraycopy将你的字节数组复制到那个。