Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 Stax vs Sax vs DOM解析器?_Java_Xml_Parsing_Sax_Stax - Fatal编程技术网

Java Stax vs Sax vs DOM解析器?

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

我通过链接。有一些关于它的问题

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

DOM解析器:-文件很小,需要沿两个方向(即向后/向前)遍历

SAX解析器:-当您不需要向后移动时,可以这样做,因为文件大小无关紧要,因为它的性能总是更好

这是正确的吗?

我最近听说了STAX,并通过维基链接访问了它。上面说

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听起来正确。