android Gson解析本地SD卡的json文件内存溢出
迷茫
迷茫 2017-04-17 15:53:40
[Android讨论组]

开发时需要从本地的SD卡读取json文件导入数据库,文件有1.3M大小,使用Gson读取时报错内存溢出,这个怎么解决??

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
PHP中文网

首先你没贴出具体错误信息。
至于OOM,对于超大(虽然你这1.3M不叫超大)的json文件,采用Json String是必然OOM的。
推荐采用FastJson,内置了超大json文件处理API
https://github.com/alibaba/fastjson/wiki/Stream-api


 JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json"));
  reader.startArray();
  while(reader.hasNext()) {
        VO vo = reader.readObject(VO.class);
        // handle vo ...
  }
  reader.endArray();
  reader.close();
 JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json"));
  reader.startObject();
  while(reader.hasNext()) {
        String key = reader.readString();
        VO vo = reader.readObject(VO.class);
        // handle vo ...
  }
  reader.endObject();
  reader.close();
天蓬老师

大文件考虑使用流操作,尽量不要直接加载整个字符串。Gson 有提供JsonReader进行文件流操作。

怪我咯

Gson提供了流,不要用String就行。

Gson gson = new Gson();
Reader reader = new FileReader("/path/to/file");
YourBean bean = gson.fromJson(reader,YourBean.class);
怪我咯

先贴出如何报错吧。

用其他开源库试试咯~ 不行就自己解析jsonObject/JsonArray

PHP中文网

这次是我傻逼了。。。

Gson 是 通过 查找 key 去一一对应地把值赋值到 UserBean中的。。。。
所以,必须保证API中返回的Json数据中的Key和UserBean一样即可。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号