将元素添加到Serialized ArrayList而不将ArrayList加载到JAVA的RAM中

时间:2017-02-06 08:04:24

标签: java serializable

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

2 个答案:

答案 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);
}