为高效的Kryo序列化注册所有类需要花费大量时间。因此,我正在尝试制作一个以包为参数的Kryo Registrator(在Java或Scala中)。我想知道最简单的方法是什么? (当然,有了反思,但现有的库更好) 非常感谢你的帮助。
答案 0 :(得分:2)
这不是一个自定义Registrator(虽然你无疑可以把它变成一个),但是你可以使用Reflections库来获得所有扩展Set
的类的Object
个感兴趣的包裹。然后只需注册该组的每个成员。
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("your.package"))
.setScanners(new SubTypesScanner(false)));
Set<Class<? extends Object>> types = reflections.getSubTypesOf(Object.class);
for (Class c : types) {
kryoInstance.register(c.getClass());
}
请注意,这将注册扩展Object的每个类(包括匿名,内部等)。你可能会更好地使用库的注释功能来限制你注册的那些你真正想要的类 - 除非那就是指定包中的所有类!