java - 如何为 Kryo Serializer 注册多个类? (例如包中的所有类)

标签 java scala serialization kryo

注册所有类以实现高效的 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/

相关文章:

java - 当我尝试插入数据时,executeQuery() 不起作用?

scala - 通过 Spark 读取时忽略损坏的 Orc 文件

spring - 在 Scala 中使用 Spring @Transactional

java - 如何读取写在文件中的 LinkedHashMap?

java - 变压器异常 : Unknown Error In XPath

java - 在 Google Analytics 数据查询过滤器中通过 OR 和 AND 运算符组合两个条件集

java - 查看不同步更新

java - 如何强制 Scala 中指令的执行顺序

java - 将java序列化对象反序列化为Scala类

C# 序列化对象版本