什么是最安全的方法来序列化任何类型的Java对象,以便:
DBObject obj = getFromDB;
Object id = obj.get(ID_KEY);
String s1 = safeSerialize(id);
obj.get(ID_KEY)
方法返回一个用作“id”的对象,它可以是ObjectId,String,Long,Integer或任何类型的Object。
然后做同样的事情:
DBObject obj = getFromDB;
Object id = obj.get(ID_KEY);
String s2 = safeSerialize(id);
我需要确保s1
仍然等于s2
。我的意思是,例如obj.get()
方法可能会为给定的new Integer(100)
返回新的say ID_KEY
实例,但仍然具有“序列化”版本。
答案 0 :(得分:0)
我认为Java序列化不会给你这些保证:
JSON同样糟糕,即使不是更糟。 JSON对象的属性顺序是显式未定义的,因此您无法保证属性每次都以相同的顺序出现在序列化中。
基于绑定的POJO串行/反序列化器可以作为XML工作(如果它们不使用属性),但是您需要注意绑定如何处理固有无序集合(如HashSets和HashMaps)的序列化。很有可能序列化中的集合/映射成员的顺序是不可预测的。
我的建议是想出另一种方法来解决你的实际问题......不管它是什么。
答案 1 :(得分:0)
您无法执行此操作,因为java.lang.Object不可序列化。
使用java.io.Serializable标记类,以指示程序员已允许二进制表示能够重新生成。
即使您要求您存储的对象仅限于可序列化的给定对象集,您也会受到序列化通常的脆弱性的影响。
如果将对象集限制为随后提供自定义序列化的集合(而不是使用默认序列化),则可以使其工作。