gpt4 book ai didi

java - 当文件大小 > 1GB 时,Gson.toJson 抛出 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:26:01 26 4
gpt4 key购买 nike

我尝试用 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 的问题,但坦率地说,你所做的是荒谬的......

关于java - 当文件大小 > 1GB 时,Gson.toJson 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com