java - 将 XML 中的 Base64 编码数据保存到文件中

标签 java xml base64

我正在解析一个包含 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 时这应该很重要。

最佳答案

文档的其余 XML 部分怎么样?您想丢弃它吗?

如果是,请查看 STAX(XML 流式 API):

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

它是 Java SE 6 的一部分。

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

关于java - 将 XML 中的 Base64 编码数据保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654642/

相关文章:

Android ImageView 使应用变慢

来自 Vertx 和 AMQPBridge 的 Java 运行时警告

java - 在 Spring Boot 应用程序中使用 @Bean 声明 bean

java - 从 googlemaps v2 中删除折线

java - Liferay如何调用新 View

java - JAXP 与 XSD import ArrayIndexOutOfBoundsException

java - 将 stax XML 写入字符串

c# - 从基于 JSON/PHP (base64_encode) 的图像中解释 C# 中的 base 64

xml - 用于声明命名空间的 XQuery 语法 : [XPST0081] No namespace declared for 'text:p'

node.js - Nodejs : Decoding base64Image Data and process it with gm "size error spawn E2BIG" error