【问题标题】:Receive large XML object接收大型 XML 对象
【发布时间】:2012-12-19 15:14:35
【问题描述】:

我的应用程序从服务器接收一些 XML 格式的数据。我使用XmlPullParser 解析它。一切正常。直到服务器发送大型嵌套对象 - BASE64 编码的位图或文件(最多 10+Mb)。在具有少量 VM 堆(例如 2.3)的旧设备上,应用程序在 String text = parser.getText(); 上崩溃(内存不足)

在这种情况下我该怎么办?

有什么方法可以获取流吗?或者mabeyXmlPullParser可以分拆给我吗?

【问题讨论】:

  • 我遇到了同样的问题(实际上即使在 4.0 上它仍然无法正常工作)。不幸的是,除了编写自己的 XML 解析器将这个字符串拆分成各种字符串并尝试对其进行操作之外,我没有找到任何解决方案。
  • 我建议使用多部分服务器响应(仅 xml 中的引用,以及二进制对象作为其他部分)。这样,您可以避免批量或解析 10M xml 和 10M B64
  • 很遗憾,我们无法修改服务器端。我看到了两种方法: 1 切换到 sax 解析器,如下所示; 2 修改KXmlParser,因为它的license没有限制,或者写一个新的

标签: android xml-parsing xmlpullparser


【解决方案1】:

一种可能是切换到Sax Parsing。主要区别在于它不需要一次将整个 xml 字符串读入内存。相反,它将以小块的方式通过它。

设置起来有点复杂,但是如果您在网上四处搜索“Android Sax Parsers 示例”之类的内容,则有一些很好的示例可以帮助您入门。这真的不再困难,只需花一点时间习惯这种方式,而不是使用拉式解析器。

【讨论】:

  • 请注意,他可能会遇到同样的问题。 SAX 解析器将尝试将 base64 元素转换为字符串,然后它也可能会失败。 base64 中的 10MB 看起来很笨重。
  • 我们使用解析器只是为了获取数据。然后我们解码数据并将其写入 BLOB 中的数据库。如果我们拆分数据并按部分解码,解码似乎很容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2018-11-22
  • 2012-07-14
相关资源
最近更新 更多