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