我试图传输一个包含瞬态字段的类(一个缓存,这对序列化没有意义)。在过去,该字段是使用标准java序列化框架提供的readResolve方法重新创建的。
public class MyClass implements Serializable {
private transient LoadingCache<Key, Value> someCache;
//this works when using default java tools. I need an equivalent method in kryo framework
Object readResolve() {
someCache = createNewCache();
return this;
}
}
Kryo不执行该方法,是否有一种不同的方式来告诉Kryo需要对反序列化的对象做什么来重建状态?
自定义序列化器不是一个选项,项目中已经有许多不同的序列化器需要调整。
找到了一个解决方案,但我仍然对更好的东西开放:我创建了一个注释,它被添加到反序列化对象的目标方法上。然后我添加了一个自定义的com.esotericsoftware.kryo.ClassResolver,它扫描该注释的新注册。
如果找到该注册的序列化器,则将其包装在一个委托序列化器中,该序列化器在对象重新创建后执行带注释的方法。