在Java中使用大文件大小(800MB UP)将XML内容解析和分割成几个xml文件的最快方法是什么

我有XML文件(GML文件),可能包含1GB文件大小,需要根据内容分成几个xml文件。

基本上,我需要一个不将内容加载到内存中的解析器。 必须以32位运行。 目标操作系统是Windows XP UP。

我在考虑以下选项:

  1. 扩展org.xml.sax.helpers.DefaultHandler

  2. 使用Xerces

  3. 使用VTD-XML(如果不将内容加载到内存中;我知道大量的VTD-XML类,但它只能用于64位平台;如果有办法在2GB文件大小中使用32位的VTD-XML)

任何关于正确方向的指导都表示赞赏。

如果你的分裂算法不需要太多的上下文(即不需要DOM或部分DOM),那么SAX(即实现DefaultHandler )肯定是最简单的方法之一,并且不会添加外部依赖。

请参阅最快的XML解析器,以获取Java中的小型简单文档 。 (问题是小文件和dom处理,答案也适合大文件)

通常,您使用SAX /流解析器来完成工作。 (选项1)

同时使用SAX(或StAX)解析器( Aalto? )和编写器 。

我假设文件包装器(根树)是已知的。

  1. 首先读取初始启动(包装器)元素。

  2. 然后打开一个新的编写器,编写文件启动包装器。 然后继续读取和写入相应的事件,直到停止标准。 然后编写结束文档包装器。 重复n次。

  3. 当您的阅读器到达最终文档包装器时停止。

对于1和3:我发现跟踪节点级别比检查元素名称更有用; 它通常有效并且更快。

显然,你可以通过在第1点添加一些变量并在第2点中应用它们来转发包装细节(如果存在)。你的停止标准应该是一些节点,一直检查文件大小会减慢速度。