我正在尝试将64000条记录中的大量数据一次写入文件。我得到的例外是我附上的。
我以前编写的代码是
Path outputpath = Paths.get("file1.json");
try (BufferedWriter writer = Files.newBufferedWriter(outputpath, StandardCharsets.UTF_8, WRITE)) {
writer.write(jsonObject.toString());
} catch (Exception e) {
//error msg
}
这里我的“jsonObject”只不过是一个包含65000行的json数组。
请你帮我把这个写入我的文件有效的方式,这样我就可以避免堆空间错误。
答案 0 :(得分:1)
你已经把你的堆栈跟踪缩短了一点,但我会假设在jsonObject.toString()中发生了异常。
基本上,你必须在两件事之间做出决定:要么分配更多内存,要么将大操作分成几个较小的内存。添加内存快速而简单,但如果您希望将来有更多数据,它将无法永远解决您的问题。正如其他人所提到的,在java命令行上使用-Xmx和/或-Xms。
您可以尝试的下一件事是使用不同的JSON库。也许您现在使用的那个并不特别适合大型JSON对象。或者可能有更新的版本。
作为最后的手段,您始终可以自己构建JSON。毕竟它是一个字符串,你已经拥有了内存中的数据。为了尽可能高效,您甚至不需要一次构建整个字符串,您可以随意向BufferedWriter写入一些内容。
答案 1 :(得分:-1)
您可以通过json对象尝试iterate:
Iterator<String> keys = (Iterator<String>) jsonObject.keys();
while (keys.hasNext()) {
String key = keys.next();
JSONObject value = jsonObject.getJSONObject(key);
writer.write(value.toString());
}
PS。你需要检查你的json对象的结构。