是否可以使用比较器序列化 TreeMap?
我已经测试过,它可以很好地序列化没有比较器的树形图,当您添加比较器时,它会引发异常。
如果我将比较器声明为瞬态,它仍然不起作用。仅当我使每个树图都瞬态时才有效,但在这种情况下它不会序列化树。
是否可以使用比较器序列化 TreeMap?
我已经测试过,它可以很好地序列化没有比较器的树形图,当您添加比较器时,它会引发异常。
如果我将比较器声明为瞬态,它仍然不起作用。仅当我使每个树图都瞬态时才有效,但在这种情况下它不会序列化树。
您尝试序列化的所有类都必须实现该java.io.Serializable
接口。此外,您的类中的每个成员变量都应该是Serializable
. 事实上,你的整个层次结构应该是。
如需更多帮助,请查看此。其他需要考虑的事项(如本文档和其他地方所述):
TreeMap 在这里没有做任何特别的事情。如果可以序列化的 TreeMap 和不序列化的 TreeMap 之间的唯一区别是您的比较器......那么您的比较器是不可序列化的。
你是如何实现比较器的?您的瞬态声明对没有瞬态引用的 TreeMap 类毫无意义。
异常说明了什么?
java.util.TreeMap不是问题,您的比较器可能是。
您需要做的就是重写您的比较器类
// throws a 'java.io.NotSerializableException'
class ThisIsNotSerializable implements Comparator<String> {
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}
class ThisIsSerializable implements Comparator<String>, Serializable {
private static final long serialVersionUID = -5972458403679726498L;
public int compare(String arg0, String arg1) {
return arg0.compareTo(arg1);
}
}
更多信息和来源
您可能会发现将 Comparator 字段更改为静态成员而不是实例成员一样简单:
public final static Comparator<String> ID_IGN_CASE_COMP
您需要确保所有其他字段都是可序列化的,但这应该是一个开始。