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