【发布时间】:2012-03-11 11:48:48
【问题描述】:
我正在解析具有 Base64 编码图像的 XML。我想提取图像并解析 XML 的其余部分。我为提取图像而编写的代码如下:
private void saveFormImage(String imageText) throws IOException {
FileOutputStream fos = null;
try {
Base64 base64=new Base64();
byte decoded[]=base64.decode(imageText.getBytes());
File file = new File(<file loc>);
fos = new FileOutputStream(file);
fos.write(decoded);
} finally {
IOUtils.closeQuietly(fos);
}
}
我使用 JDOM 解析 XML 并首先将 imageText 作为字符串获取,然后将字符串传递给此方法。然后,我使用 Apache 编解码器库对 Base64 编码数据进行解码并存储到文件中。
这是最好的方法吗?这不是非常快。它在大约 2s 内完成。有没有更快、内存效率更高的方法?
正如下面评论中的更新 - 有没有办法将 XML 中的数据直接通过管道传输到 OutputStream 并仅解码内存中的缓冲区?这是一种内存效率更高的做事方式吗?或者当 XML 大小最大为 2.5 MB 时这是否重要。
【问题讨论】:
-
您是在问代码是否尽可能高效?如果 Apache 编解码器库是 Base64 解码的最佳选择,或者在 XML 中以 Base64 编码序列化图像的整个解决方案是一个好的解决方案?您能够真正改变哪些?
-
Apache 编解码器库。我没有关于后者的选项。 XML 已经包含图像,我只需要获取它。我想知道更多,有没有办法将数据从 XML 传输到输出流,而不必将整个数据作为字符串保存在堆上? XML 大小约为 1.5MB。这是我应该担心的尺寸吗?
-
不要瘦 XSLT 是这里的解决方案。我也需要来自其他元素的数据。
-
解决问题的方法是什么?你最终找到答案了吗?您对 Base64 类使用的导入是什么?