簡體   English   中英

當文件大小> 1GB時,Gson.toJson拋出NullPointerException

[英]Gson.toJson throws NullPointerException when the file size > 1GB

我試圖用Java寫入Json格式,但是當文件大小> 1GB時遇到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)

發布為答案,以解決評論中的格式問題。

2 ^ 30個字符的數組將是2 ^ 31個字節。 作為單個字符串,這是巨大的! 需要提出的一個顯而易見的問題是為什么你有代碼:

PrintWriter out = new PrintWriter(outputFileName);
out.println(gson.toJson(tokenCounter));
out.close();

這很容易寫成:

FileWriter out = new FileWriter(outputFileName);
gson.toJson(tokenCounter, out);
out.flush();
out.close();

這不會對內存造成重大影響,而且速度會快得多。

這並沒有回答為什么你在大型StringWriter中獲得NPE的問題,但是,坦率地說,你所做的是荒謬的....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM