我有一个问题,即在Java中,DOM解析器适用于小型XML文件/流,但不适合大型文件/流。
可以指定小型或大型XML的定义吗?是否取决于文件的KB或MB数量,或结构的数量?
当然,我可以通过实施它来检查它,并测试性能,但我想这需要花费太多时间。
答案 0 :(得分:2)
这本身并不好或坏。只是它将文档的所有节点及其内容加载到内存中,而SAX允许避免这种情况。
当然,如果你的文档大100 MB,并且有一个独特的根元素,你需要在内存中有一个巨大的文本,那么使用SAX而不是DOM可能在内存消耗方面不会有太大变化。
但是如果你有数百万个元素并希望逐个处理每个元素,那么使用SAX可以保持内存使用率非常低,而DOM则不然。
答案 1 :(得分:2)
你提出这个问题是对的。真正的工程师不会谈论“大”和“小”,他们使用数字。你不要问一条非常宽阔的河流是否会非常昂贵,你要问一条1公里宽的河流将要花多少钱。
很多时候,对于内存来说,主内存中的内容和不适合内存的内容之间存在不连续性。因此,如果可用内存为2Gb,则2Gb以上的内容可能需要采用与2Gb以下不同的设计方法。因此,可以从这种不连续性的角度来理解特定设计(例如DOM)对“小”文档而不是“大”文档有用的声明。
顺便说一下,术语“DOM”有时专门用于W3C DOM,有时也用作内存树表示的通用术语。从org.w3.dom的角度来看,DOM本身并不是最好的技术方法; JDOM2和XOM等第三方树模型总是更好。人们只是因为忽视了替代品而使用DOM,或者因为它们是“标准的”而认为它具有价值。