简体   繁体   English

如何为Kryo序列化器注册许多类? (例如,包中的所有类)

[英]How to register many classes for Kryo Serializer? (e.g. all classes in a package)

Registering all classes for efficient Kryo Serialization takes a lot of time. 注册所有类以进行有效的Kryo序列化需要很多时间。 So I'm trying to make a Kryo Registrator that takes package as parameter (in Java or Scala). 因此,我正在尝试制作一个将程序包作为参数的Kryo Registrator(在Java或Scala中)。 I'm wondering what is the easiest way to do so? 我想知道最简单的方法是什么? (Of course, with reflection, but better with existing libraries) Thanks a lot for your help. (当然,通过反射,但是对于现有库则更好)感谢您的帮助。

It's not a custom Registrator (though you could doubtless turn it into one), but you could use the Reflections library to obtain a Set of all the classes that extend Object in the package of interest. 它不是一个自定义的注册器(尽管您可以毫无疑问地将其变成一个),但是您可以使用Reflections库来获取一Set扩展了Object软件包中Object的所有类的Set Then simply register each member of the 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());
}

Note that this will register EVERY class that extends Object (including anonymous, inner, etc). 请注意,这将注册每个扩展Object的类(包括匿名,内部等)。 You'd probably be better served by either using the annotation capabilities of the library to restrict what you register to those classes you really want - unless that's all that's in the specified package! 通过使用库的注释功能将注册内容限制为您真正想要的类,可能会更好地为您服务-除非这些全部在指定的包中!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在风暴中注册kryo序列化程序实例? - how to register kryo serializer instances in storm? 如何在Java中查看内置类的源代码(例如BigInteger等)? - How do I view source code of built-in classes in Java (e.g. BigInteger etc.)? Java:如何将JDK类(例如javax。*)添加到自定义JavaDoc索​​引中? - Java: How to add JDK classes (e.g. javax.*) into custom JavaDoc indexes? 用kryo注册类的策略 - Strategy for registering classes with kryo 从安全沙箱(例如applet)中生成自定义类 - Generate custom classes from within a security sandbox (e.g., applet) 可以对类进行反射意外地调用方法(例如静态构造函数)吗? - Can doing reflection on classes accidentally invoke methods (e.g. static constructors)? 是否可以将包中的所有类注册为Spring bean - Is it possible to register all classes within a package as Spring beans 是否有注释来向JAXB注册类包? - Is there an annotation to register a package of classes with JAXB? 一个 Java 包中可以放多少个类? - How many classes can be put in a Java package? 始终在目标(例如exec:exec)之前运行生命周期阶段(例如程序包) - Always run lifecycle phase (e.g. package) before goal (e.g. exec:exec)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM