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

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

我已经这样做了

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

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

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

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

您可以使用FileOutputStream类:

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

您可以使用ImageIO API 。

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

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

这可能会返回一个DataBufferByte类型的数据缓冲区(check!),从中获取一个字节数组

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

然后,您可以使用System.arraycopy将字节数组复制到该数组上。