Mir*_*rlo 5 java jackson fasterxml
我有一个很大的 json 文件,大小约为 40Gb。当我尝试将此对象数组文件转换为 java 对象列表时,它崩溃了。我已经使用了最大堆的所有大小xmx,但没有任何效果!
public Set<Interlocutor> readJsonInterlocutorsToPersist() {
String userHome = System.getProperty(USER_HOME);
log.debug("Read file interlocutors "+userHome);
try {
ObjectMapper mapper = new ObjectMapper();
// JSON file to Java object
Set<Interlocutor> interlocutorDeEntities = mapper.readValue(
new File(userHome + INTERLOCUTORS_TO_PERSIST),
new TypeReference<Set<Interlocutor>>() {
});
return interlocutorDeEntities;
} catch (Exception e) {
log.error("Exception while Reading InterlocutorsToPersist file.",
e.getMessage());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用读取此文件BufferedReader,然后逐个对象推送?
有没有办法使用 BufferedReader 读取此文件,然后逐个对象推送?
当然不是。即使你可以打开这个文件,你如何将 40GB 作为 java 对象存储在内存中?我认为你的计算机没有这么大的内存(但从技术上讲,ObjectMapper你应该有大约 2 倍的操作内存 - 40GB 用于存储 json + 40GB 用于将结果存储为 java 对象 = 80 GB)。
我认为你应该使用这个问题中的任何方式,但将信息存储在数据库或文件而不是内存中。例如,如果 json 中有数百万行,则应该解析每一行并将其保存到数据库中,而不是将其全部保留在内存中。然后你可以逐步从数据库中获取这些数据(例如每次不超过1GB)。
| 归档时间: |
|
| 查看次数: |
4999 次 |
| 最近记录: |