在JAVA中向序列化的ArrayList添加元素而不将ArrayList加载到RAM中
是否可以将元素添加到已序列化到磁盘的java数组列表中,而无需将其重新加载到RAM中。我需要它来保存XML文件中的结构化数据,以便将数据加载到mysql数据库中。XML文件有好几GB的数据,问题是我必须存储XML文件中的所有数据来处理数据?在JAVA中向序列化的ArrayList添加元素而不将ArrayList加载到RAM中,java,serializable,Java,Serializable,是否可以将元素添加到已序列化到磁盘的java数组列表中,而无需将其重新加载到RAM中。我需要它来保存XML文件中的结构化数据,以便将数据加载到mysql数据库中。XML文件有好几GB的数据,问题是我必须存储XML文件中的所有数据来处理数据?ArrayList,或者任何其他数据结构都是内存中的数据结构。因此,您希望在该数据结构中放入的任何内容都必须加载到内存(RAM)中 如果您想知道如何加载大于内存大小的数据,请考虑批处理加载。e、 g.加载符合内存约束的第一个n条目,然后对其进行处理。完成后,丢
ArrayList
,或者任何其他数据结构都是内存中的数据结构。因此,您希望在该数据结构中放入的任何内容都必须加载到内存(RAM)中
如果您想知道如何加载大于内存大小的数据,请考虑批处理加载。e、 g.加载符合内存约束的第一个
n
条目,然后对其进行处理。完成后,丢弃这些文件并加载下一批,依此类推。我认为,既然XML文件已经在GBs中,那么更好的方法是将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);
}
ArrayList是否使用标准Java序列化进行序列化?另一种序列化方法?你自己的序列化?您必须将XML文件作为原始Java对象加载,还是可以使用标准XML工具进行处理?我想使用标准Java Serialization对其进行序列化。我正在逐行处理XML文件,因为将其加载到ram中太大了。我分析每个标记并将其存储在数组中,如果ram中的大小超过某个值,我想将这些数组序列化为磁盘上的对象好吧,我认为我必须这样做,但我希望有人知道以不同的方式这样做的可能性