2017-02-06 3 views
-1

Можно ли добавить элементы в список массивов в Java, который уже сериализуется на диск, не перезагружая его в ОЗУ. Мне нужно это для сохранения структурированных данных из файла XML для загрузки данных в базу данных mysql. Файл XML содержит несколько ГБ данных, и проблема заключается в том, что я должен хранить все данные из файла XML для обработки данных?Добавление элементов в Serialized ArrayList без загрузки ArrayList в ОЗУ в JAVA

+0

Является ли ArrayList сериализованным, используя стандартную сериализацию Java? Альтернативная сериализация? Ваша собственная сериализация? Нужно ли загружать XML-файл в качестве исходных объектов Java или вы можете просто обрабатывать его с помощью стандартных инструментов XML? – RealSkeptic

+0

Я хочу сериализовать его с помощью стандартного Java serializazion. Я обрабатываю XML-файл подряд за строкой, потому что он большой, чтобы загрузить его в ram. Я анализирую каждый тег и сохраняю его в массивах, я хочу сериализовать эти массивы в объекты на диске, если размер в ram превысит какое-то значение. – arget888

ответ

0

ArrayList, или любая другая структура данных, если на то пошло, является структурой данных в памяти. Итак, все, что вы хотите поместить в эту структуру данных, должно быть загружено в память (ОЗУ).

Если вам интересно, как загружать данные, которые больше, чем сам размер памяти, рассмотрите возможность загрузки пакетами. например Загрузите первые записи n, которые вписываются в ограничение памяти, а затем обрабатывают их. Как только вы закончите, отбросьте их и загрузите следующую партию и так далее.

+0

ОК, я должен был пройти этот путь, но я надеялся, что кто-то знает, что можно сделать что по-другому – arget888

0

Я думаю, что, поскольку ваш 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); 
} 
Смежные вопросы