Java リフレクションをサポートしていない Lego Mindstorm NXT ロボットに取り組んでいます。
何らかの理由 (シミュレーターと実際のマインドストームの並行作成) で、シリアライゼーションを使用して Java オブジェクトを交換したいと考えています。
問題は、シリアル化がリフレクションを使用することです。これは、マインドストームの JVM ではサポートされていません。
何か案は?
Zwong.de でこのページを見つけましたが、ソース コードは削除されています。
Java リフレクションをサポートしていない Lego Mindstorm NXT ロボットに取り組んでいます。
何らかの理由 (シミュレーターと実際のマインドストームの並行作成) で、シリアライゼーションを使用して Java オブジェクトを交換したいと考えています。
問題は、シリアル化がリフレクションを使用することです。これは、マインドストームの JVM ではサポートされていません。
何か案は?
Zwong.de でこのページを見つけましたが、ソース コードは削除されています。
クラスに Externalizable を実装すると、ObjectOuputStream.writeObject() / readObject() は、リフレクションを使用せずに、オブジェクトに対して直接 writeExternal(ObjectOutput out) / readExternal(ObjectInput) を呼び出します。
Kryoは、シリアライズ可能なオブジェクトのリフレクションのないインスタンス化をサポートしていると思います。彼らのホームページをざっと見てみると、次のように確認できます。
ReflectASM またはリフレクションを使用できない場合、クラスのインスタンスの作成を処理するために InstantiatorStrategy を使用するように Kryo を構成できます。Objenesis は、JVM 固有の API を使用してコンストラクターをまったく呼び出さずにクラスのインスタンスを作成する StdInstantiatorStrategy を提供します。これは多くの JVM で機能します。
InstantiatorStrategy
標準の が NXT JVM をサポートするかどうかわからないので、独自の を作成する必要があるように思えますが、試してみる価値はあります! 私はこれを自分で試したことはありませんが、理論的には可能であるように思えます。
2 つの手がかりが見つかりました。うまくいけば、これらはあなたに役立つでしょう。
シリアライゼーションとデシリアライゼーションは、単にオブジェクトを読み書きする方法です。すべてのオブジェクト データを文字列/ファイル/ストリームとの間で読み書きする独自のメソッドをいつでも作成できます。
さらに、カスタムのシリアル化方法、特にバイナリ データを使用する方法は、多くの場合、Serializable によって提供される方法よりも時間、メモリ、および処理能力の消費が少なくなります。