我想用JSON解析大JSON文件簡單,並且出現內存錯誤。我在Windows 10上,筆記本電腦有8GB內存。該文件是250MB,我還需要解析一個2GB的文件。我也嘗試過使用StrinBuilder,但後來在StringBuilder上出現內存錯誤。這裏是我的代碼的StringBuilder:用JSON解析大JSON文件簡單(OutOfMemoryError)
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) {
}
錯誤
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded at org.json.simple.parser.Yylex.yylex(Unknown Source) at org.json.simple.parser.JSONParser.nextToken(Unknown Source) at org.json.simple.parser.JSONParser.parse(Unknown Source) at org.json.simple.parser.JSONParser.parse(Unknown Source)
這裏'StringBuilder'對象迭代過程中保存所有數據。以便文件中的所有內容都在內存中。您可以按照顯示如何閱讀大尺寸文件的鏈接進行操作。 http://stackoverflow.com/questions/2356137/read-large-files-in-java –
我建議你使用事件驅動程序pasrer而不是將整個JSON加載爲DOM。這應該允許您處理更大的消息。 –
@ataurRahmanMunna我嘗試了你所說的和StringBuilder是好的,但我在json解析器上再次出現內存不足錯誤。 –