根据Serializablejavadoc,readResolve()用于替换从流中读取的对象。但是肯定(?)您没有替换该对象,所以可以使用它来恢复transient字段并返回原始引用,如下所示:privateObjectreadResolve(){transientField=something;returnthis;}相对于使用readObject():privatevoidreadObject(ObjectInputStreams){s.defaultReadObject();transientField=something;}当仅用于恢复transient场时,是否有任何理由选
这个问题在这里已经有了答案:AlthoughtheSerializableinterfaceinJavahasnomethods,nofields,itcanachieveitsfunction.How?(6个答案)关闭7年前。我知道什么是序列化以及为什么要使用它,但我的问题是:为什么序列化是标记接口(interface)?在Serializable接口(interface)中没有writeObject、readObject的潜在好处是什么,因为当我们进行序列化时,我们最终会重写这两个方法?readResolve如何保证反序列化时创建的对象不是新对象。我知道下面的内容,它在反序列化期间
在反序列化我们的一个数据结构(使用默认机制(无自定义writeObject/readObject))期间,会出现一个ImmutableMap$SerializedForm实例(来自谷歌的Guava库)。这样的实例不应该从guava的客户端可见,因为SerializedForm的实例被替换为readResolve(例如,参见类com.google.common.collect.ImmutableMap中的“writeReplace”)。因此反序列化失败并显示以下消息:java.lang.ClassCastException:cannotassigninstanceofcom.google