我试图用JSON Simple解析大型JSON文件,我的内存错误。我在Windows 10上,我的笔记本电脑有8GB RAM。该文件是250mb,我还需要解析一个2GB的文件。我也试过StrinBuilder,但后来我在StringBuilder上遇到了内存错误。这是我使用StringBuilder的代码:
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("myfile.json")));
String line = null;
StringBuilder sb= new StringBuilder("");
while( (line = br.readLine())!= null ){
sb.append(line);
}
JSONParser parser = new JSONParser();
Object obj=null;
try {
obj = parser.parse(sb.toString());
}catch (Exception e) {
}
这是没有StringBuilder的代码:
JSONParser parser = new JSONParser();
Object obj=null;
try {
obj = parser.parse(new FileReader("myfile.json"));
}catch (Exception e) {
}
错误
线程“main”中的异常java.lang.OutOfMemoryError:在org.json.simple.parser.JSONParser.nextToken(未知来源)的org.json.simple.parser.Yylex.yylex(未知来源)处超出GC开销限制org.json.simple.parser.JSONParser.parse中的.json.simple.parser.JSONParser.parse(未知来源)(未知来源)
如果您打开使用其他Json解析器,那么您可以尝试使用Jackson的Streaming API,它可用于解析甚至千兆字节大小的巨大JSON。它可用于处理大型文件而无需将它们完全加载到内存中。它允许获取你想要的数据,并忽略你不想要的东西
有一些优秀的库可以用最少的资源解析大型JSON文件。一个是受欢迎的GSON library。它与将文件解析为流和对象的效果相同。它在传递时处理每个记录,然后丢弃流,保持低内存使用率。
支持任意复杂的对象(具有深层继承层次结构和广泛使用泛型类型)
看看这个Detailed Tutorial的GSON方法,解决它的问题。