我應該使用什麼庫? 什麼是幫助我的功能?如何使用java通過網絡傳輸對象
回答
最簡單的方法可能使用serialization。因此,你的對象類必須實現可序列化,所以有所有的成員(原始和大多數標準的Java類已經這樣做)。這允許在運行時在對象實例和字節流之間進行映射。
您還需要一個transer協議。你可以看看RMI,如果你不想通過線路處理你的字節流,雖然這並不困難。 然而,使用RMI允許您稍後構建更強大的分佈式Java應用程序。
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();
是否有一個原因,你寫數據到ByteArrayOutputStream而不是直接到SocketOutputStream? – meriton 2010-06-26 18:11:03
沒有特別的理由。這只是我通常分割序列化和發送/歸檔/存儲到數據庫部分,所以我通過字節[]。正如我在另一個答案中提到的,序列化數據可能不是消息的唯一部分;我可以添加簽名,路由,邏輯所需的任何其他內容 – 2010-06-27 14:29:58
這取決於:
如果另一個端點是Java那麼Java序列化可能實現的最快方式。但是支持Java序列化的注意事項並不是一項簡單的任務,而且可能會隨着時間的推移而變得很麻煩。只是谷歌「Java序列化陷阱」的一些例子。
如果其他端點不是Java或未來的可維護性和兼容性是一個目標,那麼我會建議更廣泛的可重複使用的編碼。 爲此,我會考慮Google Protocol Buffers或Apache Thrift(我只能發佈1個超鏈接)。
當然,總會有使用XML來編碼你的對象的選項。 :)
個人來說,在我們的項目中,我們一直在使用谷歌協議緩衝器,在我看來,不能被打敗的易用性,可維護性,並在我們的情況下,最重要的,協議緩存版本之間的兼容性。
如果你是在多平臺環境中,你可以使用CORBA。雖然它有點複雜,因爲您可能需要控制兩個端點並實現接口定義語言(IDL)綁定。
一個好的方法是使用JSON。您只需將JSON結構映射到您的Java對象。
- 1. 使用Java RMI時,是否通過網絡傳輸序列化對象?
- 2. 通過網絡傳輸java.lang.reflect.Proxy
- 3. 通過網絡傳輸int
- 4. 如何使用WCF C通過互聯網傳輸對象p2p#
- 5. 通過網絡在每個字段上傳輸對象
- 6. 如何使用C++通過網絡傳輸緩衝區?
- 7. 如何使用套接字通過網絡傳輸數據?
- 8. 如何通過網絡傳輸大文件/目錄使用AsyncSocket
- 9. 如何通過Wifi網絡傳遞NSData對象?
- 10. 通過使用Java的網絡發送對象
- 11. 如何使用Kryonet通過網絡發送對象?
- 12. 通過Pyro傳輸對象
- 13. 通過網絡傳輸GetBitmapBits(),安全嗎?
- 14. 通過網絡傳輸文件
- 15. 通過網絡流式傳輸圖像
- 16. 通過網絡傳輸目錄結構
- 17. 通過網絡傳輸手寫信息
- 18. 通過網絡傳輸UUID和字節
- 19. 通過套接字使用ObjectStreams來傳輸Java密鑰對象
- 20. 展示傳遞jQuery對象,以網絡API通過Ajax調用
- 21. 是否可以通過Man In The Middle攻擊將代碼注入通過網絡傳輸的Java對象?
- 22. 如何通過網絡傳遞cv :: Mat?
- 23. 如何通過WiFi網絡傳遞NSArray?
- 24. 快速的方法在網絡上傳輸Java對象
- 25. Restful webservice - 如何通過網絡發送自引用的對象?
- 26. 通過網絡發送對象向量
- 27. 通過網絡發送對象
- 28. 通過網絡推送JAX-B對象
- 29. 通過網絡使用python流式傳輸連續數據
- 30. 使用arecord和aplay通過網絡傳輸音頻
我正在通過線路尋找串流字節流的幫助。你能提供一些參考嗎? – Jus12 2011-03-07 21:18:37
RMI是舊的,無法處理與系統中的NAT回調 – user3224416 2015-07-08 15:32:28