是否可以将元素添加到已经序列化到磁盘的java中的Array列表中,而无需将其重新加载到RAM中。我需要这个来保存XML文件中的结构化数据以将数据加载到mysql数据库中。 XML文件有几GB的数据,问题是我必须存储XML文件中的所有数据来处理数据吗?
答案 0 :(得分:0)
ArrayList
或任何其他数据结构是内存中的数据结构。因此,无论您希望在此数据结构中放置什么,都要加载到内存(RAM)中。
如果您想知道如何加载超过内存大小的数据,请考虑批量加载。例如加载适合内存约束的第一个n
条目,然后处理它们。完成后,丢弃它们并加载下一批等等。
答案 1 :(得分:0)
我认为既然您的XML文件已经在GB中,那么更好的方法是在Chunks中读取XML文件并将记录块保存到数据库。继续这样做直到达到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);
}