android Gson解析本地SD卡的json文件内存溢出

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

阅读 10.1k
5 个回答

首先你没贴出具体错误信息。
至于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

这次是我傻逼了。。。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏