我需要将 xml 文件的 base64 编码元素写入单独的文件中。问题:文件的大小很容易达到 100 MB。我尝试的每个解决方案都以“java.lang.OutOfMemoryError:Java堆空间”结束。问题不在于一般的读取xml或解码过程,而在于base64块的大小。
我使用 jdom、dom4j 和 XMLStreamReader 来访问 xml 文件。但是,一旦我想访问相应元素的 base64 内容,我就会收到上述错误。我还尝试使用 saxon 的 base64Binary-to-octets 函数进行 xslt,但结果当然是相同的。
有没有一种方法可以将这个 Base64 编码部分流式传输到文件中,而无需将整个块分成一个部分?
谢谢你的提示,
Andreas
Apache 通用编解码器 http://commons.apache.org/codec/ has a Base64OutputStream http://commons.apache.org/codec/api-release/org/apache/commons/codec/binary/Base64OutputStream.html,这应该允许您通过链接以可扩展的方式提供 XML 数据Base64OutputStream
with a FileOutputStream
.
您需要将 XML 表示为字符串,因此您甚至可能根本不需要将其读入 DOM 结构。
就像是:
PrintWriter printWriter = new PrintWriter(
new Base64OutputStream(
new BufferedOutputStream(
new FileOutputStream("/path/to/my/file")
)
)
);
printWriter.write(myXml);
printWriter.close();
如果输入 XML 文件太大,那么您应该循环将其块读入缓冲区,并将缓冲区内容写入输出(即标准的读取器到写入器副本)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)