【问题标题】:Saving Base64 encoded data from XML into a file将 XML 中的 Base64 编码数据保存到文件中
【发布时间】: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 类使用的导入是什么?

标签: java xml base64


【解决方案1】:

文档的其余 XML 呢?要丢弃吗?

如果是,请查看 STAX (Streaming API for XML):

http://docs.oracle.com/javase/7/docs/api/javax/xml/stream/package-summary.html

它是 Java SE 6 的一部分。

如果您还想解析文档的其余部分,请考虑使用自定义绑定的 JAXB。

【讨论】:

  • 我还需要其他元素的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 2010-12-18
  • 1970-01-01
相关资源
最近更新 更多