【发布时间】:2012-11-15 03:25:38
【问题描述】:
我正在编写一个程序,它从硬盘读取大量数据并根据这些数据创建一个 hashmap,然后我进行一些处理,稍微改变这个初始 hashmap。我的问题是,每次我运行我的程序时,我都会从相同的数据创建相同的哈希图(我们称之为初始哈希图)。只有处理与一次运行不同。无论如何,我可以创建一次这个哈希图并永久保存它吗?序列化会有帮助吗?
【问题讨论】:
标签: java hashtable persistent-storage
我正在编写一个程序,它从硬盘读取大量数据并根据这些数据创建一个 hashmap,然后我进行一些处理,稍微改变这个初始 hashmap。我的问题是,每次我运行我的程序时,我都会从相同的数据创建相同的哈希图(我们称之为初始哈希图)。只有处理与一次运行不同。无论如何,我可以创建一次这个哈希图并永久保存它吗?序列化会有帮助吗?
【问题讨论】:
标签: java hashtable persistent-storage
这是一个众所周知的问题,有很多解决方案,其中我建议两个: 1.将hashmap保存在sql数据库表中,主键列包含键值,另一列包含对应值; 2. 使用 nosql 数据存储,其中有很多,其中包括 Redis 或 SimpleDb。
【讨论】:
由于 HashMap 是可序列化的,我将使用这种方式来保存它:
public void saveStatus(Serializable object){
try {
FileOutputStream saveFile = new FileOutputStream("current.dat");
ObjectOutputStream out = new ObjectOutputStream(saveFile);
out.writeObject(object);
out.close();
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
要恢复您的对象,只需这样做:
public Object loadStatus(){
Object result = null;
try {
FileInputStream saveFile = new FileInputStream("current.dat");
ObjectInputStream in = new ObjectInputStream(saveFile);
result = in.readObject();
in.close();
fileIn.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
然后你可以将这个方法返回的对象转换为 HashMap 并在同一个地方继续。
【讨论】:
此处已提出类似问题;我推荐谷歌搜索:
java persistent hash table
话虽如此,您可以手动将键值对保存到文件或数据库中,并在启动时重建哈希。
【讨论】: