android - 树解析器与流解析器

标签 android parsing battery

寻找关于树解析器与流解析器的解释。

从我一直在研究 android 中的 JSON 内置解析器来看,它是一个树解析器,而 Jackson Json 解析器是一个流解析器。此外,android 的 xml pull 解析器是一个流解析器。

我的问题是什么是树解析器,你能解释一下流解析器和树解析器之间的区别吗?来自 Google I/O 的演讲者提到树解析器会占用更多的电池生命周期,应该避免使用流解析器。

更新:树解析器是否等于 Dom 解析器?我的意思是条款是一样的吗?

最佳答案

树解析器返回文本的完整解析。因此,在整个文本被解析之前它不会给出答案。

相反,流解析器在处理文本时返回信息。如果您愿意,则由您决定 build 一棵树。在算法中,这种差异是所谓的批处理或离线算法(树解析)与在线算法(流解析器)之间的差异。

What's the difference between an on-line and off-line algorithm? .

那么,为什么要选择一个而不是另一个呢? Google I/O 演讲者提到了电池生命周期。但这是更一般的原则的结果,您需要更多的内存来存储整个文本的树,并且需要更多的处理时间来读取整个文本(假设流解析器可以提前退出)。

如果您正在寻找使用一小部分文本的特定信息,例如在 DOM 或 XML 文档中查找第一个标签,那么流方法可能是您的最佳选择。

另一方面,如果您需要查找所有标签和各种标签,您可能会认为这些标签是文档中的几个概念传递,或者如果您会一遍又一遍地回到该文本/树,那么您可能想要解析一次并处理结果树,而不是对文本进行多次传递。

同样,如果您需要的信息最好通过将问题视为树来回答:从子节点、兄弟节点和/或祖先节点获取或传递信息,那么您可能想要采用树方法。但...

从理论上讲,您始终可以通过在进行过程中构建树来将流解析器转换为树解析器。这是您必须编写的额外代码。

流解析器和树解析器之间的区别就像 Python 迭代器/生成器与列表(相当于 Ruby 枚举与数组)之间的区别。

关于android - 树解析器与流解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382957/

相关文章:

java - 在 Android 中显示/隐藏 WebView

bash - 在 bash 中扩展星号

javascript - 在 Javascript 中获取背景位置的 posX 和 posY

android - 基准测试电池安卓

javascript - 本地引用nanohttpd中的jquery脚本(Android)

java - php中的简单字符串加密和Java中的解密?

java - 如何在没有外部库的情况下在java中按字母顺序对json数据进行排序?

json - 在 Swift 中解析 JSON 数据(来自 URL)

android - 电池历史学家找不到结束时间 android

android - 使用 intent 和 BroadcastReceiver 获取 android 电池电量时的奇怪行为