2010-06-26 40 views

回答

8

最簡單的方法可能使用serialization。因此,你的對象類必須實現可序列化,所以有所有的成員(原始和大多數標準的Java類已經這樣做)。這允許在運行時在對象實例和字節流之間進行映射。

您還需要一個transer協議。你可以看看RMI,如果你不想通過線路處理你的字節流,雖然這並不困難。 然而,使用RMI允許您稍後構建更強大的分佈式Java應用程序。

+0

我正在通過線路尋找串流字節流的幫助。你能提供一些參考嗎? – Jus12 2011-03-07 21:18:37

+0

RMI是舊的,無法處理與系統中的NAT回調 – user3224416 2015-07-08 15:32:28

7

ObjectOutputStream/ObjectInputStream。

整個邏輯大致如下。根據您的應用程序的需求進行調整。

發送:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
oos.writeObject(objectToSend); 
oos.close(); 

byte[] bytes = baos.toByteArray(); 
socket.write(bytes); 

接收:

ObjectInputStream ois = new ObjectInputStream(socketInputStream); 
MyObject mo = (MyObject)ois.readObject(); 
+1

是否有一個原因,你寫數據到ByteArrayOutputStream而不是直接到SocketOutputStream? – meriton 2010-06-26 18:11:03

+1

沒有特別的理由。這只是我通常分割序列化和發送/歸檔/存儲到數據庫部分,所以我通過字節[]。正如我在另一個答案中提到的,序列化數據可能不是消息的唯一部分;我可以添加簽名,路由,邏輯所需的任何其他內容 – 2010-06-27 14:29:58

3

這取決於:

如果另一個端點是Java那麼Java序列化可能實現的最快方式。但是支持Java序列化的注意事項並不是一項簡單的任務,而且可能會隨着時間的推移而變得很麻煩。只是谷歌「Java序列化陷阱」的一些例子。

如果其他端點不是Java或未來的可維護性和兼容性是一個目標,那麼我會建議更廣泛的可重複使用的編碼。 爲此,我會考慮Google Protocol Buffers或Apache Thrift(我只能發佈1個超鏈接)。

當然,總會有使用XML來編碼你的對象的選項。 :)

個人來說,在我們的項目中,我們一直在使用谷歌協議緩衝器,在我看來,不能被打敗的易用性,可維護性,並在我們的情況下,最重要的,協議緩存版本之間的兼容性。

0

如果你是在多平臺環境中,你可以使用CORBA。雖然它有點複雜,因爲您可能需要控制兩個端點並實現接口定義語言(IDL)綁定。

一個好的方法是使用JSON。您只需將JSON結構映射到您的Java對象。