如何在java中将大型XML转换为字符串
Posted
技术标签:
【中文标题】如何在java中将大型XML转换为字符串【英文标题】:How to convert large XML to string in java 【发布时间】:2017-02-20 18:29:06 【问题描述】:作为 PIG 脚本的一部分,我需要获取使用 UDF 生成的 XML,并且 XML 太大(大约 1.5GB)。目前我正在使用下面的代码将 XML 转换为字符串
StringWriter sw = new StringWriter();
XMLWriter output = new XMLWriter(sw, xmlFormat);
try
output.write(document);
output.close();
catch (IOException e)
return sw.toString();
这会抛出 OutofMemoryError,因为 StringWriter 在内部使用字符串缓冲区并且它依赖于 Arrays。因为 Arrays 使用整数作为索引并且 XML 的长度超出了 int 范围。
有没有办法将这个大的 xml 转换为 String 并将其发送回 pig 脚本?或者我们可以通过任何其他方式实现它。
仅供参考 - 我们使用 dom4j(org.dom4j.Document
) 来处理 XML
更新1: 我尝试了下面的代码,现在我可以存储 800 MB,但 1.5 GB 的文件仍然失败
ByteArrayOutputStream result = new ByteArrayOutputStream();
try
XMLWriter output = new XMLWriter(result, xmlFormat);
output.write(document);
output.close();
return result.toString("UTF-8");
catch (IOException e)
【问题讨论】:
AFAIK XML 已经是一种基于文本的格式,所以它实际上已经是一个字符串。另外我不知道您为什么要将其转换为字符串,也许问题出在您的推理上。在任何情况下,您都可以:1) 为 JVM 分配更多内存或 2) 使用文件而不是字符串进行传输,然后在另一端读取它。 【参考方案1】:为避免内存不足,您需要流式传输您的 xml 文件。您可以为此使用 StreamingXMLLoader 流并直接在 Pig 脚本中解析您的 xml。
【讨论】:
以上是关于如何在java中将大型XML转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在java中将String转换为DOM Document对象?
如何在 PHP 中将 XML 字符串转换为 DOMDocument?
如何在iOS中将字符串转换为xml? (目标 C,xcode 7.2)