如何在没有反射的情况下进行 Java 序列化



我正在开发一个不支持Java反射的Lego Mindstorm NXT机器人。

出于某种原因(模拟器的并行创建和实际的头脑风暴(,我们希望使用序列化来交换 Java 对象。

问题是序列化使用反射,而头脑风暴上的 JVM 不支持反射。

有什么想法吗?

我在 Zwong.de 上找到了这个页面,但源代码已被删除。

让你的类实现 Externalizable,然后 ObjectOuputStream.writeObject((/readObject(( 将直接在你的对象上调用 writeExternal(ObjectOutput out(/readExternal(ObjectInput(,而不使用反射

我相信 Kryo 支持可序列化对象的无反射实例化。快速浏览他们的主页似乎证实了这一点:

当无法使用 ReflectASM 或反射时,可以将 Kryo 配置为使用 InstantiatorStrategy 来处理类的创建实例。 Objenesis提供了StdInstantiatorStrategy,它使用特定于JVM的API来创建类的实例,而无需调用任何构造函数。这适用于许多 JVM。

听起来你需要创建自己的InstantiatorStrategy,因为我不确定标准的是否会支持NXT JVM - 值得一试!我自己还没有尝试过,但听起来理论上应该是可能的。

我找到了两个可能的线索。希望这些对您有所帮助。

1(在没有反射的情况下进行Java序列化

2( 用于Java的XML序列化生成器,不使用反射

序列化和反序列化只是编写和读取对象的一种方式。您始终可以编写自己的方法来向字符串/文件/流写入和读取所有对象数据。

此外,自定义序列化方法(尤其是那些使用二进制数据的方法(通常比 Serializable 提供的这些方法消耗更少的时间、内存和处理能力。

相关内容

  • 没有找到相关文章

最新更新