如何保存和加载 HashMap<String,Object>?
Posted
技术标签:
【中文标题】如何保存和加载 HashMap<String,Object>?【英文标题】:How to save and load a HashMap<String,Object>? 【发布时间】:2012-10-23 18:22:26 【问题描述】:哈希映射
public Map<String, BarrackData> barrack = new HashMap<String, BarrackData>();
兵营数据.java
public class BarrackData
int A;
int B;
int C;
int D;
int E;
String Title;
public BarrackData(int a, int b, int c, int d, int e, String title)
A = a;
B = b;
C = c;
D = d;
P = p;
Title = title;
如何保存这个 HashMap? 并加载它? 我用 Objectin/outputstream 尝试了不同的方法, 它以 NotSerializable、ObjectSteam 和 IO 异常告终, 我不知道如何处理它们。
【问题讨论】:
公平地说,它不是Serializable
。
【参考方案1】:
只有Serializable
类可以序列化:只需将implements Serializable
添加到您的类中即可:
public class BarrackData implements Serializable
请注意,要真正被序列化,类中的所有字段都必须是Serializable
,但是java原语、数组(如果元素类型是Serializable
)、java.lang
类(如String
) 和Collections
(如果元素类型是Serializable
)是Serializable
,所以你没问题。
【讨论】:
感谢您的帮助,当我尝试实现 Serializable 时,Eclipse 要求添加 Serial 版本 ID 或 @SuppressWarnings("serial")。所以我不明白我必须选择什么以及为什么。 你不需要那个序列号。这是为了保护您在更改类字段类型/编号后免于反序列化(假设您还更改了序列版本 ID)。如果你愿意,请忽略它 - 它是安全的【参考方案2】:要完成答案,请注意keySet()
的结果属于HashMap
(如果您随时需要)不是Serializable
。
确实,键不应该与HashMap
相关的值分离。
【讨论】:
【参考方案3】:您必须使您的 Object 类可序列化(为其提供 serialize() 和 deserialize() 方法,将其转换为字符串或可以保存/加载的字符串)。显然,HashMap 促进了开箱即用的某种程度的序列化。
这里是Java序列化教程的链接:http://www.tutorialspoint.com/java/java_serialization.htm
这里有一些关于 HashMap 序列化的更详细信息: Serializing and deserializing a map with key as string
正如 Bohemian 所说,实现 Serializable
是执行此操作的标准方法。
【讨论】:
以上是关于如何保存和加载 HashMap<String,Object>?的主要内容,如果未能解决你的问题,请参考以下文章
Java Spark 如何将 JavaPairRDD<HashSet<String>, HashMap<String, Double>> 保存到文件中?
如何从 ArrayList<HashMap<String, String>> android 中获取所有元素