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

问题描述:

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

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阵列使用整数索引和XML的长度超出了INT范围。

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

仅供参考 - 我们正在使用的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

AFAIK XML已经是基于文本的格式,所以它实际上已经是一个字符串。此外,我不知道为什么你要将它转换为字符串,也许问题在于你的推理。在任何情况下,您都可以:1)为JVM分配更多内存或2)使用文件而不是字符串进行传输,然后在另一端读取它。 – m0skit0

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