Stax vs Sax vs DOM解析器?

时间:2014-05-12 18:01:34

标签: java xml parsing sax stax

我通过了wiki链接。基于它得到了一些问题。

根据我的理解,我们应该根据以下标准选择其中一个解析器

DOM解析器: - 文件很小,需要双向遍历,即向后/向前

SAX Parser: - 当你没有要求向后移动时,为了这个目的,因为文件小或大并不重要因为它在性能方面总是更好。

这是正确的吗?

我最近听说过STAX并通过wiki链接。它说

StAX was designed as a median between these two opposites(DOM ans SAX).

有了这个我得到的印象我们可以用STAX向后/向前移动,但谷歌搜索说我们只能向前移动 与STAX。那么为什么stax提供了DOM的优势呢?

Link也说

  

应用程序向前移动光标 - '拉动'信息   来自解析器,因为它需要。这与基于事件的不同   API - 例如SAX - 推动'数据到应用程序 -   要求应用程序维护事件之间的状态   必须跟踪文件中的位置

所以STAX使用pull方法而sax使用push方法但是对于开发人员来说它是如何拉或推的又重要 直到并且除非它的性能好或需要更少的努力?

1 个答案:

答案 0 :(得分:4)

push模型适用于非阻塞通道,而pull模型适用于阻塞流。

假设您有一个事件循环,从非阻塞套接字读取,例如NIO和你有一块数据。对于此模型,您需要推送,因此您可以推送您拥有的数据并转移到其他工作。

对于拉模型,解析器会告诉您何时需要读取更多数据。这使得与另一个线程共享该线程更加困难。 NIO的常见解决方案是,首先将整个未解析的文档读入内存,然后将其传递给pull解析器。显然,这对于低延迟或大型文档来说效果不佳。