在 JAVA 中将元素添加到序列化 ArrayList 而无需将 ArrayList 加载到 RAM

adding Elements to Serialized ArrayList without loading ArrayList into RAM in JAVA

是否可以将元素添加到 java 中已经序列化到磁盘的数组列表中,而无需将其重新加载到 RAM 中。我需要这个来保存来自 XML 文件的结构化数据,以便将数据加载到 mysql 数据库中。 XML 文件有几 GB 的数据,问题是我必须存储 XML 文件中的所有数据才能处理数据?

ArrayList 或与此相关的任何其他数据结构是 in-memory 数据结构。因此,无论您想放入此数据结构中,都必须加载到内存 (RAM) 中。

如果您想知道如何加载超过内存大小的数据,请考虑分批加载。例如加载符合内存限制的前 n 个条目,然后处理它们。完成后,丢弃这些并加载下一批,依此类推。

我认为既然你的 XML 文件已经是 GB,那么更好的方法是读取 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);
}