首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Dom4j用SAXReader读取大XML时(1G),怎么控制内存占用

2012-08-21 
Dom4j用SAXReader读取大XML时(1G),如何控制内存占用我有一个大的XML文件,1G,需要用流的方式读取,我可以在

Dom4j用SAXReader读取大XML时(1G),如何控制内存占用
我有一个大的XML文件,1G,需要用流的方式读取,我可以在拿到一个节点并处理之后就不需要这个节点的内容再在内存中了。但是Dom4j还是在内存中存储了所有节点的内容,导致OutOfMemory。如何不让Dom4j保存内存的结构呢?
代码如下
public class ExtractPersonAliasFromDBLP implements ElementHandler {
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();
reader.setDefaultHandler(this);
reader.read("big.xml");
}

@Override
public void onStart(ElementPath elementPath) {

}

@Override
public void onEnd(ElementPath elementPath) {
Element dblpElm = elementPath.getCurrent();
if (!"name".equals(dblpElm.getName())) {
return;
}
dblpElm.detach();
}

}


如何才能不让Dom4j在内存中保留信息呢,我处理过的就扔掉。
试过在onEnd中加入dblpElm.detach();还是没有效果

搞定了,只要在onStart的时候将节点detach()就可以了。
1 楼 thomas0104 2012-02-10   将xml中大数据量部分的内容提前处理,并保存至java集合中,然后将内存中大数据量部分逐个从内存中去掉。在数据入库前,将大数据量集合赋给相应数据,执行保存对象操作。

热点排行