替换标准 Android JSON 解析器以获得更好的性能?
Posted
技术标签:
【中文标题】替换标准 Android JSON 解析器以获得更好的性能?【英文标题】:Replace standard Android JSON parser for better performance? 【发布时间】:2011-01-30 23:05:24 【问题描述】:我知道 android 内置了 JSON 解析器,但我想知道是否值得使用性能更好的东西(如 Jackson - 请参阅 http://jackson.codehaus.org/)?有人试过吗?
【问题讨论】:
我从来没有遇到过 Android 的 JSON 解析器的速度问题。我什至在我的一个应用程序中有一个 41kb 的 JSON 文件,它在 G1 上加载只需几百毫秒(这很好,因为它只需要在应用程序启动时运行一次)。 绝对语速是可以接受的。考虑到在常规台式机 CPU 上,JSON 解析速度大约为数十兆 - 41 kb 文件将在毫秒左右完成,这仍然很好。即使 Android 系统通常具有较慢的 CPU,相对于快速替代方案而言,一百毫秒还是相当慢的。所以,适合这项工作的工具。对于临时使用(例如在启动时读取配置文件),内置处理程序通常是不错的。很高兴知道如果用例需要,还有改进的余地。 【参考方案1】:嗯,这里有一个couple 和links 比较 Jackson JSON 性能与现有 JSON、SAX 和协议缓冲区。根据作者的说法,Jackson 比 SAX 或内置 JSON 更快,并且与 Protocol Buffers 差不多。最后一部分听起来有点可疑,但无论如何,Jackson 确实可以在 Android 上运行,并且可能值得进行一些实验。
不过,我还没有检查 JAR 的大小。如果它很大,除非您渴望额外的 JSON 性能,否则可能不值得占用空间。
【讨论】:
是的,文件大小肯定在我的可能限制列表中。我想如果我在我的应用程序中浏览大量 JSON,可能值得添加 Jackson,但我现在还是坚持使用标准 JSON。【参考方案2】:从 API 11 开始,Android 中有一个 stream json parser
【讨论】:
谢谢!我没有注意到它在那里,因为它不在 JSON 包中 编辑:协议缓冲区是你想要的最佳性能【参考方案3】:迟到的答案,但它可能仍然有帮助。我正在使用 Jackson 从 Twitter 解析 JSON,并将 Maps
持久化到数据库中。杰克逊的数据映射非常棒。能够将 JSON 直接映射到一个对象真是太棒了,并且让一切都变得更干净。
即使您只是解析简单的回复,数据映射也可以帮助您使代码更简洁(更高效)。对我来说,我不必为每种类型的 Twitter api 函数编写解析逻辑,这真是天赐之物。
【讨论】:
感谢您的反馈 - 如果需要的话,很高兴在胸部有另一个工具。【参考方案4】:只是对这些解析器的另一种看法。我浏览了 2009 年的 Google IO,关于应用程序开发人员有效使用电池的讨论非常好。
这是该演讲的链接:link
现在,根据谈话的说法,android 的内置牧师是基于树的,在电池寿命方面,这些应该是低效的。有没有人真正研究过这个。
通读这个讨论,Jackson 解析器似乎是所有事情的赢家。它几乎同样快,如果不超过内置的话,而且它基于事件/流,而不是基于树,这在电池使用方面更好。
虽然我想分享一下并就此获得一些意见。
【讨论】:
【参考方案5】:我使用jackson json 来实现我的android 应用程序,它通过json-rpc 与服务器通信。我想用它来序列化/反序列化 json-rpc 请求和响应以及对象以传输数据。 我使用 2.0 版的 Jackson-json。我在构建路径中放入了两个 jar:jackson-databind-2.0.0.jar、jackson-core-2.0.0.jar 和 jackson-annotations-2.0.0.jar。
附带说明:android.xml 是否有任何 json-rpc 实现。单独的 json-rpc 和 http 流量会很好。我用谷歌搜索了很多,但没有找到好的 json-rpc 生成器、json 序列化器/反序列化器,对于传输,我将使用 android-query。
【讨论】:
以上是关于替换标准 Android JSON 解析器以获得更好的性能?的主要内容,如果未能解决你的问题,请参考以下文章