Java XML DOM包含大量数据,我该如何缓冲它?

时间:2011-11-29 03:50:45

标签: java

我有一个生成XML数据的Java程序,该程序非常庞大。我在javax.xml和org.w3c.dom对象中使用典型的解析器。内存中的DOM变得如此之大,以至于偶尔耗尽内存。现在,它达到内存限制的原因是因为程序一次生成所有数据,然后将其转换为String,然后转换为文件。一次生成数百个元素,可以一次创建一个并缓冲到文件而不是缓慢填充RAM。我一直在寻找图书馆,但我对什么是好的有点困惑。我应该使用什么方法将这个DOM文档缓冲到一个文件而不是一次生成所有文件?

1 个答案:

答案 0 :(得分:0)

是Marty,我还建议你使用SAX。 It consumes less memory。 这是SAX实现的简单示例代码。

public class SaxReader{
    public void readXML() throws Exception{
        ResultHandler oHandler                      = new ResultHandler();
        CreateParser parser                         = new CreateParser(oHandler);    
        String responseXML = "Place your XML as String HERE";
        InputSource input                                   = new InputSource(new StringReader(responseXml)); 
        input.setEncoding("UTF-8");     
        parser.parse(input);

    }
}


class ResultHandler extends DefaultHandler {
    public void startDocument (){
        System.out.println("Start document");
    }

    public void endDocument (){
        System.out.println("End document");
    }

    public void startElement(String namespaceURI, String localName, String qName, Attributes attribs)throws SAXException {
        strValue = "";
        if(null!=qName && qName.equals("ID")){
            System.out.println("Starting element <ID> : "+strValue);
        }
    }

    public void characters(char[] ch, int start, int length)throws SAXException {
        strValue += new String(ch, start, length);
        System.out.println(">>>" + strValue);//Reading the values.
    }

    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
        if(null!=qName && qName.equals("ID")){
            System.out.println("Ending element </ID> : "+strValue);
        }
    }
}