Java Stax vs Sax vs DOM解析器?
我通过链接。有一些关于它的问题 根据我的理解,我们应该基于以下标准选择其中一个解析器 DOM解析器:-文件很小,需要沿两个方向(即向后/向前)遍历 SAX解析器:-当您不需要向后移动时,可以这样做,因为文件大小无关紧要,因为它的性能总是更好 这是正确的吗? 我最近听说了STAX,并通过维基链接访问了它。上面说Java Stax vs Sax vs DOM解析器?,java,xml,parsing,sax,stax,Java,Xml,Parsing,Sax,Stax,我通过链接。有一些关于它的问题 根据我的理解,我们应该基于以下标准选择其中一个解析器 DOM解析器:-文件很小,需要沿两个方向(即向后/向前)遍历 SAX解析器:-当您不需要向后移动时,可以这样做,因为文件大小无关紧要,因为它的性能总是更好 这是正确的吗? 我最近听说了STAX,并通过维基链接访问了它。上面说 StAX was designed as a median between these two opposites(DOM ans SAX). 有了这一点,我得到的印象是,我们可以用ST
StAX was designed as a median between these two opposites(DOM ans SAX).
有了这一点,我得到的印象是,我们可以用STAX向后/向前移动,但谷歌说我们只能向前移动
和斯塔克斯。那么为什么stax提供了DOM的优势呢
林克还说
应用程序将光标向前移动-“拉动”信息
根据需要从解析器中删除。这与基于事件的方法不同
API(如SAX)将数据“推送”到应用程序-
要求应用程序根据需要在事件之间保持状态
需要跟踪文档中的位置
所以STAX使用拉方法,而sax使用推方法,但它的拉还是推对开发人员有什么关系呢
除非其性能良好或需要较少的努力,否则推送模式适用于非阻塞通道,而拉送模式适用于阻塞流 假设您有一个事件循环,从非阻塞套接字(例如NIO)读取,并且您有一段数据。对于这个模型,您需要推送,因此您可以推送您拥有的数据并转移到其他工作
对于拉模型,解析器会告诉您何时需要读取更多数据。这使得与另一个线程共享该线程更加困难。NIO的常见解决方案是,首先将整个未解析文档读入内存,然后将其传递给pull解析器。显然,这对于低延迟或大型文档来说效果不太好。推送模式适用于非阻塞通道,而拉送模式适用于阻塞流 假设您有一个事件循环,从非阻塞套接字(例如NIO)读取,并且您有一段数据。对于这个模型,您需要推送,因此您可以推送您拥有的数据并转移到其他工作
对于拉模型,解析器会告诉您何时需要读取更多数据。这使得与另一个线程共享该线程更加困难。NIO的常见解决方案是,首先将整个未解析文档读入内存,然后将其传递给pull解析器。显然,这对于低延迟或大型文档来说并不太好。SAX是基于事件的低级api,对于开发人员来说非常不舒服。SAX是低级的基于事件的api,对于开发人员来说非常不舒服。STAX更好。我对SAX和dom解析器用法的理解正确吗?@MSach我不太了解STAX,但SAX和dom听起来正确。我对SAX和dom解析器用法的理解正确吗?@MSach我不太了解STAX,但SAX和dom听起来正确。