Java 将HashMap逐段保存到文件

Java 将HashMap逐段保存到文件,java,hashmap,save,export,Java,Hashmap,Save,Export,我在Java中运行一个大循环,在每个过程中,数据都填充在HashMap中。 循环非常长,因此我无法在内存中保存完整的HashMap。因此,我需要找到一种方法,在大约每1000次迭代之后将Hashmap导出到一个文件 我在考虑在每1000个步骤到一个文件后使用序列化导出HashMap,清除HashMap变量,并通过将下一个附加到同一个文件来重复这个过程。但是从文件中检索完整的HashMap时会出现问题,因为每次导出时都会有元数据附加到文件中。那么,还有其他方法可以做到这一点吗 编辑: HashMa

我在Java中运行一个大循环,在每个过程中,数据都填充在HashMap中。 循环非常长,因此我无法在内存中保存完整的HashMap。因此,我需要找到一种方法,在大约每1000次迭代之后将Hashmap导出到一个文件

我在考虑在每1000个步骤到一个文件后使用序列化导出HashMap,清除HashMap变量,并通过将下一个附加到同一个文件来重复这个过程。但是从文件中检索完整的HashMap时会出现问题,因为每次导出时都会有元数据附加到文件中。那么,还有其他方法可以做到这一点吗

编辑: HashMap结构如下所示:

    HashMap<Key, double[]>

    Key {
        String name;
        BitSet set;
    }
HashMap
钥匙{
字符串名;
位集;
}

是。您有一个很好的主意,每N次迭代就清除一次文件,这看起来类似于:

public void exportHashTable() {
    HashMap<String, Object> map = new HashMap<>();
    map.put("hi", "world");

    for (int i = 0; i < map.size(); i++) {

        // Some logic ..

        if (i % 1000 == 0) {
            appendToFile(map);
            map.clear();
        }
    }
}

如果你要进行串行化,你需要什么样的元数据?持续增长的映射的目的并不清楚,但是假设每个循环都需要它,考虑使用一个数据库(而不是一个文件)来保存键/值。可能有一个LFU缓存,以避免在每个循环中命中数据库。@alainlompo如果我序列化并保存,我每次都需要保存到一个新文件。如果我一直附加到同一个文件,我只能检索第一个对象。我假设这是因为在第一次保存时,文件开头附加了一些元数据,表示该文件包含一个HashMap。是的,但我的问题是,如何实现appendToFile?因为使用序列化不起作用。Java中是否有将HashMap导出为CSV或JSON的功能?(不下载任何新库)是的,有一些库可以将对象转换为JSON(Jackson和Gson),还有一些库可以创建类似于ApacheCommons的CSV。不幸的是,您没有提供我用来向您展示示例的任何正在保存的对象,但是,如果您编辑文章并向我提供您试图保存的对象的示例,并在对此答案的评论中询问我,我将乐意这样做。添加示例
public void importHashTable() {
    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
        String line;
        while ((line = br.readLine()) != null) {
            // process the line, add to hashmap or do some other operation
        }
    }
}