解码 base64 映像并存储在磁盘上(使用 java)内存不足



我需要在磁盘上存储一个 base64 图像,但是当我将 base64 图像解码为 byte[] 时出现错误:"内存不足"。大小图像约为6MB这是我的代码:

byte[] decodedBytes = DatatypeConverter.parseBase64Binary(photo); //HERE I HAVE THE ERROR!!
log.debug("binary ok");
BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));    
String nomeEdata = String.valueOf(Calendar.getInstance().getTimeInMillis() + ".jpg");
String nomeImg = resourceBundle.getString("schede.pathSaveImage") + nomeEdata;
File outputfile = new File(nomeImg);
ImageIO.write(bfi , "png", outputfile);
bfi.flush();

拜托,有什么建议吗?

您可以将"照片"内容写入临时文件,然后使用 Base64InputStream 从中读取。

但是,最终,BufferedImage将在内存中拥有整个原始图像。这将要求您具有足够大的堆大小来容纳此大小。您可能只需要增加 Xmx 值。

final BufferedImage bi = ImageIO.read(new Base64InputStream(new ReaderInputStream(new StringReader(photo), "ascii"));
final File file = ...
final FileOutputStream fos = new FileOutputStream(file);
try
{
    ImageIO.write(bi, "png", new Base64OutputStream(fos));
}
finally 
{
    fos.close();
}

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/ReaderInputStream.html

最新更新