2013-03-05 7 views
7

私はJava ReflectionをサポートしていないLego Mindstorm NXTロボットで作業しています。ReflectionなしでJavaのシリアル化を行うには?

何らかの理由で(シミュレータの並列作成と実際のマインドストーム)、シリアライゼーションを使用してJavaオブジェクトを交換する必要があります。

問題は、シリアライズでリフレクションが使用されることです。マインドストームのJVMではサポートされていません。

アイデア?

this page on Zwong.deが見つかりましたが、ソースコードは削除されています。

+1

を使用せずに男のさえずり名が上場され、あなたのオブジェクトのdirectyにwriteExternalメソッド(出たObjectOutput)/ readExternalの(のObjectInput)を呼び出しますあなたのクラスが外部化、そしてObjectOuputStream.writeObject()/ readObject()メソッドを実装してくださいそのサイト(@corneliushald)は、彼にpingして尋ねる価値があるかもしれません。通常、これらのことは設計以上に偶然に行方不明になります。 – berry120

答えて

1

Kryoは、シリアライズ可能なオブジェクトのリフレクションレスのインスタンス化をサポートしています。

ReflectASMまたはリフレクションを使用できない場合、KryoはInstantiatorStrategyを使用してクラスのインスタンスを作成するように設定できます。 ObjenesisはStdInstantiatorStrategyを提供しています。StdInstantiatorStrategyは、JVM固有のAPIを使用して、コンストラクタをまったく呼び出すことなくクラスのインスタンスを作成します。これは多くのJVMで機能します。

私は標準的なものは、NXT JVMをサポートしていますかわからないので、あなたは、InstantiatorStrategy独自に作成する必要がありますようにそれはそれから聞こえる - しかし試してみる価値を!私はこれを自分で試したことはありませんが、理論上可能であるように聞こえます。

0

2つの可能なリードが見つかりました。うまくいけば、これらはあなたにいくつかの助けになります。

1)Doing Java serialization without reflection

2)xml serialization generator for java without using reflection

+1

あなたの最初の答えのソースコードはオフラインです、私はすでに私の質問でそれを言及した。 –

+0

リンクされたGoogleキャッシュバージョンを読み込むことができました。あなたがソースコードを今でもダウンロードできることは疑問に思えます。まもなくサーバーがまもなくバックアップされます。 –

+2

[答え]と[faq]を見てください。あなたの答えは自己完結型でなければなりません。その考え方を反映させるためにあなたの答えを改善してください。 –

0

シリアライゼーションおよびデシリアライゼーションは、単にオブジェクトを書き込み、読み出す方法です。文字列/ファイル/ストリームに/からすべてのオブジェクトデータを書き込み、読み込む独自のメソッドを書くことができます。

さらに、バイナリデータを使用するカスタムシリアル化メソッドは、シリアライズ可能なものよりも時間、メモリ、および処理の電力消費が少ないことがよくあります。

1

反射

+0

私たちはExternalizableインターフェイスの存在を知らなかったが、それは有望だと思う。問題は、leJOS Java Mindstorm APIがObjectOutputStreamクラスまたはObjectInputStreamクラスを提供しないことです。どうすればこれらのオブジェクトなしでExternalizableを使用できますか?または、リフレクションを使用せずに独自のクラスを実装する必要がありますか? –