如何根据超类拦截Kryo中的反序列化?

时间:2016-01-18 21:01:01

标签: java kryo

我使用以下代码为Kryo反序列化添加钩子。

private static class KryoWithHooks extends Kryo {
private static final class SerializerWithHook extends com.esotericsoftware.kryo.Serializer {
  private final com.esotericsoftware.kryo.Serializer old;
  private final Hook hook;

  private SerializerWithHook(com.esotericsoftware.kryo.Serializer old, Hook hook) {
    this.old = old;
    this.hook = hook;
  }

  @Override
  public Object read(Kryo kryo, Input input, Class type) {
    hook.preRead(type);
    return hook.postRead(old.read(kryo, input, type));
  }

  @Override
  public void write(Kryo kryo, Output output, Object object) {
    // Add write hooks if needed.
    old.write(kryo, output, object);
  }
}

  public void addHook(Class<?> k, Hook h) {
    register(k, new SerializerWithHook(newDefaultSerializer(k), h));
  }
}
}

然后我在注册所有显式类后添加钩子。 到现在为止还挺好。 问题是,如果我事先不了解班级,并且只知道基类,我该如何做同样的事情呢?即我有

class Container {
  private Contained c;
}

包含可以有任意数量的子类,我想在实例化之前拦截它的反序列化/。如果我为上面的Contained.class添加钩子,那就不会被调用(可以理解),即使是例如容器工作正常。

0 个答案:

没有答案