7

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

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

问题是序列化使用了反射,mindstorm上的JVM不支持。

有任何想法吗?

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

4

4 回答 4

4

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

于 2013-03-05T13:48:24.633 回答
1

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

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

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

于 2013-03-05T13:35:21.800 回答
0

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

1)不进行反射进行Java序列化

2)不使用反射的 java xml 序列化生成器

于 2013-03-05T13:36:55.940 回答
0

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

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

于 2013-03-05T13:39:59.433 回答