2015-11-07 101 views
2

目前,我進入「java.lang.OutOfMemoryError:Java堆空間」 下面是代碼編寫的,我在這裏通過輸入流得到
JsonReader對象進行進一步。請讓我知道最好的方法應該是什麼
。提前致謝。需要分析大量JSON文件

JsonReader reader = new JsonReader(new InputStreamReader(inputStream)); 
    JsonObject element = new JsonParser().parse(reader).getAsJsonObject(); 

//堆棧跟蹤

com.domo.connector.util.MagicException: Failed parsing JSON source: JsonReader at line 1 column 80720228 to Json 
    at com.domo.connector.adaptv.api.Client.get(Client.java:125) 
    at com.domo.connector.adaptv.api.Client.get(Client.java:86) 
    at com.domo.connector.adaptv.api.AdhocReportClient.getFirstPage(AdhocReportClient.java:24) 
    at com.domo.connector.adaptv.ProcessRecords.getClientWithFirstPageOfData(ProcessRecords.java:116) 
    at com.domo.connector.adaptv.ProcessRecords.readData(ProcessRecords.java:58) 
    at com.domo.connector.adaptv.ProcessRecordsFunctionalTest.testCustomer(ProcessRecordsFunctionalTest.java:38) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
    at org.testng.TestRunner.privateRun(TestRunner.java:767) 
    at org.testng.TestRunner.run(TestRunner.java:617) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:240) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 
    at org.testng.TestNG.run(TestNG.java:1057) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 
Caused by: com.google.gson.JsonParseException: Failed parsing JSON source: JsonReader at line 1 column 80720228 to Json 
    at com.google.gson.JsonParser.parse(JsonParser.java:88) 
    at com.domo.connector.adaptv.parser.AdapTVParser.parse(AdapTVParser.java:45) 
    at com.domo.connector.adaptv.api.Client.get(Client.java:102) 
    ... 29 more 
Caused by: java.lang.OutOfMemoryError: Java heap space 
    at java.util.ArrayList.<init>(ArrayList.java:132) 
    at java.util.ArrayList.<init>(ArrayList.java:139) 
    at com.google.gson.JsonArray.<init>(JsonArray.java:40) 
    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:656) 
    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667) 
    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:659) 
    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:667) 
    at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642) 
    at com.google.gson.internal.Streams.parse(Streams.java:44) 
    at com.google.gson.JsonParser.parse(JsonParser.java:84) 
    at com.domo.connector.adaptv.parser.AdapTVParser.parse(AdapTVParser.java:45) 
    at com.domo.connector.adaptv.api.Client.get(Client.java:102) 
    at com.domo.connector.adaptv.api.Client.get(Client.java:86) 
    at com.domo.connector.adaptv.api.AdhocReportClient.getFirstPage(AdhocReportClient.java:24) 
    at com.domo.connector.adaptv.ProcessRecords.getClientWithFirstPageOfData(ProcessRecords.java:116) 
    at com.domo.connector.adaptv.ProcessRecords.readData(ProcessRecords.java:58) 
    at com.domo.connector.adaptv.ProcessRecordsFunctionalTest.testCustomer(ProcessRecordsFunctionalTest.java:38) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) 
    at org.testng.TestRunner.privateRun(TestRunner.java:767) 
    at org.testng.TestRunner.run(TestRunner.java:617) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291) 
+0

http://www.ngdata.com/parsing-a-large-json-file-efficiently-and-easily/希望這是你在找什麼 – bakki

+1

什麼是你的json文件的大小是如此之大? –

回答

0

如果你的文件是非常大的,你不能建立在內存中的DOM樹/ JSON對象。您必須使用pull或SAX解析器並逐步計算文檔。這將迫使你重寫處理JSON對象的代碼。

JSON simpleJackson

如果您解析某種流的,基於事件的方法會更好,如果它只是一個文件,一個拉解析器就足夠了。