Можно ли добавить элементы в список массивов в Java, который уже сериализуется на диск, не перезагружая его в ОЗУ. Мне нужно это для сохранения структурированных данных из файла XML для загрузки данных в базу данных mysql. Файл XML содержит несколько ГБ данных, и проблема заключается в том, что я должен хранить все данные из файла XML для обработки данных?Добавление элементов в Serialized ArrayList без загрузки ArrayList в ОЗУ в JAVA
ответ
ArrayList
, или любая другая структура данных, если на то пошло, является структурой данных в памяти. Итак, все, что вы хотите поместить в эту структуру данных, должно быть загружено в память (ОЗУ).
Если вам интересно, как загружать данные, которые больше, чем сам размер памяти, рассмотрите возможность загрузки пакетами. например Загрузите первые записи n
, которые вписываются в ограничение памяти, а затем обрабатывают их. Как только вы закончите, отбросьте их и загрузите следующую партию и так далее.
ОК, я должен был пройти этот путь, но я надеялся, что кто-то знает, что можно сделать что по-другому – arget888
Я думаю, что, поскольку ваш XML-файл уже находится в ГБ, тогда лучшим подходом было бы читать XML-файл в Chunks и Save Chunk of Records to Database. Продолжайте делать это до тех пор, пока EOF не достигнет.
String encoding = "UTF-8";
int maxlines = 100;
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new InputStreamReader(new FileInputStream("/bigfile.txt"), encoding));
int count = 0;
for (String line; (line = reader.readLine()) != null;) {
if (count++ % maxlines == 0) {
close(writer);
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("/smallfile" + (count/maxlines) + ".txt"), encoding));
}
writer.write(line);
writer.newLine();
}
} finally {
close(writer);
close(reader);
}
Является ли ArrayList сериализованным, используя стандартную сериализацию Java? Альтернативная сериализация? Ваша собственная сериализация? Нужно ли загружать XML-файл в качестве исходных объектов Java или вы можете просто обрабатывать его с помощью стандартных инструментов XML? – RealSkeptic
Я хочу сериализовать его с помощью стандартного Java serializazion. Я обрабатываю XML-файл подряд за строкой, потому что он большой, чтобы загрузить его в ram. Я анализирую каждый тег и сохраняю его в массивах, я хочу сериализовать эти массивы в объекты на диске, если размер в ram превысит какое-то значение. – arget888