如何在java中将大型XML转换为字符串

时间:2017-02-20 18:29:07

标签: java xml apache-pig dom4j

作为PIG脚本的一部分,我需要获取使用UDF生成的XML,并且XML太大(大约1.5GB)。目前我使用下面的代码将XML转换为String

    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.As Arrays使用整数作为索引,XML的长度超出了int范围。

有没有办法将这个大的xml转换为String并将其发送回pig脚本?或者我们能否以任何其他方式实现它。

仅供参考 - 我们正在使用dom4j(org.dom4j.Document)来处理XML

UPDATE1:  我尝试下面的代码,我现在能够存储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) {}

1 个答案:

答案 0 :(得分:0)

为避免内存不足,您需要流式传输xml文件。您可以使用那个直接在Pig脚本中流式传输并解析xml的StreamingXMLLoader