我試圖用Java寫入Json格式,但當文件大小> 1GB時遇到NullPointerException。任何人都可以幫助我解決這個問題嗎?當文件大小大於1GB時,Gson.toJson拋出NullPointerException
該代碼不斷生成Json文件,並且文件的大小不斷增加。一旦文件大小> 1GB,代碼將拋出異常,如下所示。我使用不同的數據集進行測試,所以我不認爲這是數據問題。我的猜測是Java中的Gson.toJson有一個大小限制。
我的代碼是:
private HashMap<String,HashSet<Token>> tokenCounter = new HashMap<String,HashSet<Token>>();
....
private void writeToFile(){
try {
PrintWriter out = new PrintWriter(outputFileName);
out.println(gson.toJson(tokenCounter));
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
它拋出一個例外是:
java.lang.NullPointerException
at java.lang.String.<init>(String.java:301)
at java.lang.StringBuffer.toString(StringBuffer.java:790)
at java.io.StringWriter.toString(StringWriter.java:204)
at com.google.gson.Gson.toJson(Gson.java:481)
at com.google.gson.Gson.toJson(Gson.java:460)
at com.ebay.classification.discovery.DailyDiscovery.writeToFile(DailyDiscovery.java:181)
at com.ebay.classification.discovery.DailyDiscovery.run(DailyDiscovery.java:169)
at com.ebay.classification.discovery.TestDailyDiscoveryContinue.run(TestDailyDiscoveryContinue.java:142)
at com.ebay.classification.discovery.TestDailyDiscoveryContinue.main(TestDailyDiscoveryContinue.java:245)
奇怪,堆棧跟蹤指示'的char []'從傳遞['StringBuffer.toString'](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/lang/StringBuffer.java#StringBuffer.toString%28% 29)是'空'... – 2013-05-04 23:44:20
是的,我也覺得有點奇怪。我嘗試了幾個不同的數據集,並且在1GB點出現相同的異常: – Long 2013-05-04 23:51:19
@jlordo這似乎是不可能的,因爲數組創建需要一個「int」參數。 int可以溢出,但會拋出'NegativeArraySizeException'。 – 2013-05-04 23:57:46