2012-02-22 20 views
4

私が過去に行ったソケットプログラミングは、単純なテキストストリームです。私は、ソケットを介してJavaオブジェクトのようなものを送信する最も効果的な方法は何でしょうかと思います。例えばソケットを介したオブジェクトの送信

私は、次のEmployeeクラスを持っている場合(従属はの依存情報からなる単純なクラスになります):

public class Employee { 
    private String name; 
    private double salary; 
    private ArrayList<Dependent> dependents; 
} 

私はEmployeeオブジェクトをシリアライズ作り、ソケットを介してインスタンスを送信する必要があります。または、Employees情報を含むxmlファイルを作成して送信する必要がありますか?どんな指針も大変ありがとうございます。あるいは、全く違った、より良い方法がありますか?ありがとうございました!

答えて

3

Java JVM間のデータのみを送信する場合は、いずれかの選択が可能です。

テキスト表現(XML、JSON、またはカスタム)は、いくつかの利点があります。

  • それは少しバージョン変更またはの顔に少ない脆性のJavaや他の言語
  • 間、それは相互運用可能にするために簡単です形式によっては、それはテストする非常に簡単です
  • ソケットおよびデバッグ

の両端にあるコードの異なるバージョンが、それは、少し遅くなる場合がありしかしこれはしばしば重要ではない。

+0

JSONコーディングはシリアル化よりも高速ですが、JSONデコードはデシリアライズよりも遅いと聞いています – shevchyk

0

低レベルソケットを直接使用する必要がある場合は、いくつかの方法があります。テキスト形式に変換してバイトを送信し、もう一方の側でそれを再構成することができます。オブジェクトがシリアライズ可能な場合は、ソケット(http://www.rgagnon.com/javadetails/java-0043.html)でオブジェクトを送信できます。

柔軟性がある場合は、RMIを使用してリモートから操作することもできます。

+0

ジェフを、この特定のケースでRMIを使用することは何ですか? – shevchyk

3

XMLを使用することに必ずしも縛られていない場合は、JSONを試すこともできます。ライブラリgoogle-gsonはこれを非常に簡単にします。

Employee employee = new Employee(); 
... 

Gson gson = new Gson(); 
String json = gson.toJson(employee); 

、他端にStringをdeserialiseする: - - :それは同じくらい簡単ですコードシリアライズするには

String socketDataAsString = null; 
...<read from socket>... 

Gson gson = new Gson(); 
Employee employee = gson.fromJson(socketDataAsString, Employee.class); 
関連する問題