У меня есть большой файл размером 40 ГБ, когда я пытаюсь преобразовать этот json-файл массива объектов в список объектов 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;
}
}
Есть ли способ прочитать этот файл с помощью BufferedReader
, а затем нажать объект за объектом?
Редактировать :
я нашел РЕШЕНИЕ от @Viacheslav:
public Set<Interlocutor> readJsonInterlocutorsToPersist() throws IOException {
String userHome = System.getProperty(USER_HOME);
log.debug("readJsonInterlocutorsToPersist file");
JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream(userHome + INTERLOCUTORS_TO_PERSIST), "UTF-8"));
Set<Interlocutor> interlocutorDeEntities = new HashSet<Interlocutor>();
reader.beginArray();
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, UnixEpochDateTypeAdapter.getUnixEpochDateTypeAdapter())
.create();
int i = 0;
while (reader.hasNext()) {
Interlocutor message = gson.fromJson(reader, Interlocutor.class);
log.debug((++i) +" add new interlocutor");
interlocutorDeEntities.add(message);
}
reader.endArray();
reader.close();
return interlocutorDeEntities;
}
Большое спасибо !
JsonParser.nextToken()
- person Viet   schedule 01.07.2020