2012-02-22 182 views
4

我在過去完成的唯一套接字編程是簡單的文本流。我想知道通過套接字發送類似Java對象的最有效方式是什麼。通過套接字發送對象

舉例來說,如果我有以下Employee類(依賴將是一個依賴的信息組成一個簡單的類):

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

如果我只是做了Employee對象序列化,並通過套接字發送的情況。或者我應該寫一個包含員工信息的XML文件併發送該文件?任何指導將不勝感激。還是有一些完全不同的更好的方法?謝謝!

回答

3

如果您只是在Java JVM之間發送數據,則可以進行選擇。

文本表示(XML,JSON,或自定義)有以下幾個優點:

  • 它更容易讓Java等語言
  • 它在版本變化或略臉上不易脆之間的互操作在插座
  • 它極大地更容易測試和調試

根據格式的每一端是不同版本的代碼,它可能會慢一點,但這往往不顯着。

+0

我聽說過,JSON編碼比序列化要快,但JSON解碼比反序列化要慢 – shevchyk 2012-08-12 20:28:59

0

如果您必須直接使用低級套接字,您可以使用幾種方法。您可以將其轉換爲文本格式併發送字節,然後在另一側重新構建它。如果你的對象是可序列化的,你可以通過套接字發送它們(http://www.rgagnon.com/javadetails/java-0043.html)。

如果您有一定的靈活性,您也可以使用RMI進行遠程交互。

+0

傑夫,究竟是在這種特殊情況下使用RMI的? – shevchyk 2012-08-12 20:22:19

3

如果你不一定要使用XML,你也可以嘗試使用JSON。圖書館使這非常微不足道。以連載的代碼很簡單: -

Employee employee = new Employee(); 
... 

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

並以deserialise的String在另一端: -

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

Gson gson = new Gson(); 
Employee employee = gson.fromJson(socketDataAsString, Employee.class); 
相關問題