我通过了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方法但是对于开发人员来说它是如何拉或推的又重要 直到并且除非它的性能好或需要更少的努力?
答案 0 :(得分:4)
push模型适用于非阻塞通道,而pull模型适用于阻塞流。
假设您有一个事件循环,从非阻塞套接字读取,例如NIO和你有一块数据。对于此模型,您需要推送,因此您可以推送您拥有的数据并转移到其他工作。
对于拉模型,解析器会告诉您何时需要读取更多数据。这使得与另一个线程共享该线程更加困难。 NIO的常见解决方案是,首先将整个未解析的文档读入内存,然后将其传递给pull解析器。显然,这对于低延迟或大型文档来说效果不佳。