Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Flyweight设计的XML-DOM解析_Java_Xml_Dom_Flyweight Pattern - Fatal编程技术网

Java 基于Flyweight设计的XML-DOM解析

Java 基于Flyweight设计的XML-DOM解析,java,xml,dom,flyweight-pattern,Java,Xml,Dom,Flyweight Pattern,对于包含大量重复节点、属性或值的文档,使用DOM在java中处理XML文档可能会占用大量内存 有人知道Java XML DOM API在内部利用flyweight模式将内存占用降至最低吗?甚至可以配置/enable/disable?它不是DOM,但是SAX(javax.xml.parsers.SAXParser)应该会有帮助 我不知道这样的DOM解析器(并不意味着它不存在)。但是,可能解析器与您正在搜索的内容很接近。您真的是指flyweight模式吗?或者有没有想过像延迟加载(或者可能是“延迟解

对于包含大量重复节点、属性或值的文档,使用DOM在java中处理XML文档可能会占用大量内存

有人知道Java XML DOM API在内部利用flyweight模式将内存占用降至最低吗?甚至可以配置/enable/disable?

它不是DOM,但是SAX(javax.xml.parsers.SAXParser)应该会有帮助


我不知道这样的DOM解析器(并不意味着它不存在)。但是,可能解析器与您正在搜索的内容很接近。

您真的是指flyweight模式吗?或者有没有想过像延迟加载(或者可能是“延迟解析”)这样的事情?使用flyweight模式需要解析器识别具有相同内容(和结构)的元素。这将是一个耗时的操作(我担心,这也会占用空间)。此外,解析器应该在哪个深度开始识别flyweights

事实上,我无法想象会有任何DOM解析器识别flyweights。而且也不会有使用延迟加载的DOM解析器。这就是DOM的本质:解析整个XML文件并为高度灵活和随机的导航生成数据结构

也许您确实可以通过使用或切换到流式处理。当然,您将失去灵活和随机导航的能力,因为您现在必须“动态”处理元素


但是,有一个名为的解析器。这是在考虑记忆效率的情况下发展起来的。它还将整个XML文件加载到内存中,并提供一些在元素中导航的方法。但请注意:这种导航有点复杂,而且不是很直观(因为内存效率高的存储特性)。但也许这是你可以使用的东西。

这不是对所问问题的回答。DOM有一些SAX不具备的属性(例如导航)。我怀疑是否有任何类似DOM的实现具有flyweight模式,因为更改树中的值(即DOM)是很难实现的。或者,只要用户理解,由于节点是相同的,更改一个将更改所有节点,共享资源是flyweight的主题。DOM假定所有东西都是唯一的,但情况并非总是如此。