对于包含大量重复节点、属性或值的文档,使用DOM在java中处理XML文档可能会占用过多的内存。
有没有人知道Java XML DOM API可以在内部利用flyweight-pattern将内存占用保持在最小?甚至是可配置/启用/禁用?
发布于 2013-07-11 21:05:20
你真的指的是轻量级模式吗?或者是否考虑过延迟加载(或者可能是“延迟解析”)?使用flyweight模式需要解析器识别具有相同内容(和结构)的元素。这将是耗时的操作(我担心这也会耗费空间)。此外,解析器应该在哪个深度开始识别flyweight?
事实上,我无法想象有任何DOM解析器能够识别flyweight。而且也不会有使用延迟加载的DOM解析器。这就是DOM的本质:解析整个XML文件,并为高度灵活和随机的导航生成数据结构。
也许您确实可以通过使用SAX或StAX切换到流进程。当然,您将失去灵活和随机导航的能力,因为您现在必须“即时”处理您的元素。
但是,有一个名为VTD-XML的解析器。这是在考虑内存效率的情况下开发的。它还将整个XML文件加载到内存中,并提供一些在元素之间导航的方法。但请注意:这种导航有点复杂,而且不是很直观(由于内存高效存储的本质)。但也许这是你可以使用的东西。
发布于 2013-07-11 21:00:11
我不知道这样的DOM解析器(并不意味着它不存在)。但是,也许StAX解析器会更接近您要搜索的内容。
发布于 2013-07-11 20:48:22
它不是DOM,但SAX(javax.xml.parsers.SAXParser)应该会有帮助。
Parsing an XML File Using SAX
https://stackoverflow.com/questions/17593721
复制相似问题