Bluetooth経由でAndroid上に分散処理システムを作ろうとしているので、Serializableを実装したクラスを作り、そのオブジェクトをシリアライズ、デシリアライズしてByteArrayとして送信できるようにするメソッドを作りました。問題は、他のデバイスで実行するために、各オブジェクトに異なるコードを持たせる必要があることです。メソッドをオーバーライドしてから、そのメソッドを他のデバイスで実行することを考えましたが、そうすると、NotSerializableException が発生します。それを修正する方法はありますか?または、そうでない場合、他のデバイスで実行されるさまざまなコードを送信する別の方法はありますか?
1 に答える
0
デフォルトのシリアル化メカニズムは、オブジェクトの派生元のクラスの実際の LOGIC ではなく、オブジェクトの STATE を転送する手段を提供することを目的としています。したがって、メソッドに含まれるコードは (少なくともデフォルトでは) シリアライズ可能ではありません。
ソリューション
必要な結果を達成するか、少なくとも近似するために採用できるアプローチや戦略は多数あります。肝心なのは、実行したいクラスファイルのコピーがサーバーに必要になるということです。
動的方法:
「クラス」または完全な jar を標準ファイルとしてサーバーに動的にディスパッチし、シリアライゼーションを使用して、クライアントから呼び出したいメソッドの詳細 (つまり、名前、署名など) を送信できます。
静的方法:
ビルド プロセスの一環として、アプリケーション jar のコピーをサーバーのクラス パスに配置します。
もちろん、Externalizable Interfaceを実装して、独自のシリアル化メカニズムとセマンティクスを定義することもできます。これについて、または私が概説した他の方法についてさらに情報が必要な場合はお知らせください。
于 2013-03-06T13:06:20.400 に答える