是否可以使用比较器序列化TreeMap?
我已经测试过,它可以很好地序列化没有比较器的树图,当您添加比较器时,它会引发异常。
如果我将比较器声明为瞬态的,它仍然不起作用。仅当我使每个树图都变为瞬态时,它才起作用,但在这种情况下,它不对树进行序列化。
您尝试序列化的所有类都必须实现java.io.Serializable
接口。另外,您班上的每个成员变量都应为Serializable
。实际上,您的整个层次结构应该是。
要获得更多帮助,请查看this。其他要考虑的内容(如本文档和其他地方提到的):
TreeMap在这里没有做任何特别的事情。如果序列化的TreeMap与未序列化的TreeMap之间的唯一区别是您的比较器...,则您的比较器无法序列化。
您如何实现比较器?对于没有瞬时引用的TreeMap类,您的瞬时声明是没有意义的。
例外说明什么?
java.util.TreeMap没问题,您的comparator可能是问题。
您需要做的就是重写比较器类
// 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);
}
}
更多信息&source
您可能会发现,就像将Comparator字段更改为静态成员而不是实例成员一样简单:
public final static Comparator<String> ID_IGN_CASE_COMP
您将需要确保所有其他字段都是可序列化的,但这应该是一个开始。