草庐IT

readResolve

全部标签

java - readObject() 与 readResolve() 恢复 transient 字段

根据Serializablejavadoc,readResolve()用于替换从流中读取的对象。但是肯定(?)您没有替换该对象,所以可以使用它来恢复transient字段并返回原始引用,如下所示:privateObjectreadResolve(){transientField=something;returnthis;}相对于使用readObject():privatevoidreadObject(ObjectInputStreams){s.defaultReadObject();transientField=something;}当仅用于恢复transient场时,是否有任何理由选

java - 为什么 Serializable 接口(interface)不包含任何方法?

这个问题在这里已经有了答案:AlthoughtheSerializableinterfaceinJavahasnomethods,nofields,itcanachieveitsfunction.How?(6个答案)关闭7年前。我知道什么是序列化以及为什么要使用它,但我的问题是:为什么序列化是标记接口(interface)?在Serializable接口(interface)中没有writeObject、readObject的潜在好处是什么,因为当我们进行序列化时,我们最终会重写这两个方法?readResolve如何保证反序列化时创建的对象不是新对象。我知道下面的内容,它在反序列化期间

java - readResolve 不起作用? : an instance of Guava's SerializedForm appears

在反序列化我们的一个数据结构(使用默认机制(无自定义writeObject/readObject))期间,会出现一个ImmutableMap$SerializedForm实例(来自谷歌的Guava库)。这样的实例不应该从guava的客户端可见,因为SerializedForm的实例被替换为readResolve(例如,参见类com.google.common.collect.ImmutableMap中的“writeReplace”)。因此反序列化失败并显示以下消息:java.lang.ClassCastException:cannotassigninstanceofcom.google