【问题标题】:How to save and load a HashMap<String,Object>?如何保存和加载 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

标签: java map load hashmap save


【解决方案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 是执行此操作的标准方法。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2013-10-04
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2017-11-04
      • 2020-01-08
      相关资源
      最近更新 更多