当前位置: 首页 > 资讯 >

Android XML Parser

上篇我们讲解了如何使用 Kotlin 来写 XML parser ,我们也有提到 DOM parser 有个缺点就是有可能会消耗较多的记忆体,这点在 mobile 平台其实要特别注意,尤其是 Android 系统,Android 的装置很多,我们没办法保证手机的记忆体一定很大。在写 Android APP 的时候,希望能够尽可能地省记忆体。那之前介绍的 DOM parser 在 Android 上不见得是很好的做法,幸运的是 Android 原生有提供优化过的 XML parser ,我们可以拿这个来当成我们日後 annotation processor 的 parser generator 的基底。

XmlPullParser

这个 parser 其实并不存在 Java 的 standard library ,他是一个 Android 额外纳入的 library ,但他的运作原理其实跟 StAX 一样。

  • Event pulling based 机制。
  • 以 steam 资料流方式载入资料,读到哪,写到哪,依赖节点走访的先後顺序。
  • 与 DOM parser 相比,较省记忆体。
  • 经过实测在 runtime 的时候真的比 DOM parser 快。

XmlPullParser 虽说比较快,也比较省记忆体,但还是有一个缺点:无法直接跨层存取 tag ,必须要一层一层读取。这个对我们在写 parser 的时候,或许会比较不方便,我们可以用暂存的变数先把一层层的参数存起来解决无法跨层存取的问题。

XmlPullParser 在拉 event 的时候是靠 next() 这个方法去达成的,有点像是我们在写 List 的 iterator ,回圈每次去问还有没有下个 element 可以用。在这个 parser 里面有预先定义好一些 event 可以让我们使用:

  • START_DOCUMENT
    • 代表 XML 内容开始的 event 。
  • START_TAG
    • 这个 event 代表一个 tag 的起始 。
  • TEXT
    • 代表文字内容的 event 。
  • END_TAG
    • 这个 event 代表一个 tag 的结束。
  • END_DOCUMENT
    • 代表 XML 内容结束的 event 。

下篇我们将会开始实作 XmlPullParser ,我们可以比较一下它写起来的感觉和 DOM parser 有什麽差别!


相关文章:

  • Day23 Load balance with Istio
  • Day1 写程序的前置工作!
  • DAY1-为何要逼自己参加铁人赛
  • Day 20 什麽是「长尾关键字」?
  • Smalltalk 语言和你 SAY HELLO!!
  • Day19 - GitLab CI 上传 Image 到 Google Container Registry
  • javasScript 进阶笔记二 (object.prototype.call)
  • 证照为我们的职涯提供基本的防护
  • 第二十八日-MYSQL预存程序 STORED PROCEDURE:来写一个BMI小程序(1)
  • Day08-import/export
  • [全民疯AI系列2.0] 完赛总结
  • switch-case 与select
  • Day 09: 【番外篇】关於写 Code 这件事 (待改进中... )
  • [第九天]从0开始的UnityAR手机游戏开发-介绍Unity写程序的基本语法。
  • EP 24: The CRUD & Search of SQLite in TopStore App
  • WordPress SEO怎么做?如何优化WordPress提升流量
  • 礼品卡和虚拟信用卡的区别:Prepaid Debit Card和Virtual Credit Card区别
  • 搬瓦工VPS优惠码/ 促销码 、最新BandwagonHost官网促销
  • 如何在Hositnger主机开启Cloudflare服务,Hositnger主机Cloudflare CDN使用教程
  • RPA是什么?Litrpa是什么?可以做什么好用吗?
  • 国外VPS优惠码大全:
  • 最好的国外VPS推荐:国外好用便宜性价比高的VPS有哪些
  • 阿里云OSS对象存储控制客户端
  • WordPress 为当前文章在【分类】小工具中的所属分类添加current-cat类名
  • WordPress教程:教你如何置顶文章
  • 一键脚本/Superspeed: 一键测试服务器到国内的速度
  • 使用MailPoet扩展您的电子商务邮件列表
  • 财富自由怎么实现?如何做到财富自由
  • Gutenberg 10.6 添加Duotone过滤器、查询模式轮播和最常用标签选择器
  • 如何引导用户快速购买下单的冲动?引导用户购买行为的方法(Call To Action)