前言
如果你需要在 Java 中处理一个大的 JSON 对象或 文件,直接使用Gson解析或FastJson解析,会很容易出现耗尽内存的情况。即使原始数据大小小于内存容量,Java也会进一步增加内存使用量。这意味着程序会在与磁盘交互时处理缓慢,或在内存不足时崩溃。
一种常见的解决方案是流解析,也就是惰性解析、迭代解析或分块处理。下面我将用流解析InputStreamReader和Gson处理大JSON文件:
- 定义文件字节流
- 根据路径创建一个对象
- 根据文件流创建字符流对象
- 构建Gson对象,创建Gson对象时调用create()方法,将Gson的配置信息作为默认配置信息
- 使用fromJson()方法来实现从Json相关对象到Java实体
public static <T>T ReadJSonTextToObject(String path,Class<T> type) {
FileInputStream fis= null;
T obj = null;
try {
fis = new FileInputStream(path);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try(Reader reader = new InputStreamReader(fis,"UTF-8")){
Gson gson = new GsonBuilder().create();
obj = gson.fromJson(reader, type);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return obj;
}