注册所有类以实现高效的 Kryo 序列化需要花费大量时间。所以我试图制作一个将包作为参数的 Kryo 注册器(在 Java 或 Scala 中)。我想知道最简单的方法是什么? (当然,通过反射,但使用现有的库更好) 非常感谢您的帮助。
最佳答案
它不是一个自定义的注册器(尽管您无疑可以将其变成一个),但您可以使用 Reflections库来获取扩展感兴趣包中的Object
的所有类的Set
。然后只需注册集合中的每个成员即可。
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 的每个类(包括匿名类、内部类等)。通过使用库的注释功能来限制您注册到您真正想要的类,您可能会得到更好的服务 - 除非这就是指定包中的全部内容!
关于java - 如何为 Kryo Serializer 注册多个类? (例如包中的所有类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30250279/