2009-12-19 162 views
7

我定義了一個類,然後我定義了一個類類型的對象。我想將這個對象透明地發送到在另一臺計算機上運行的另一個Java應用程序。完成這項任務的最佳技術是什麼?通過互聯網發送對象

+2

你的意思是像衛星,互聯網或AM/FM收音機?或者,如果不是,我們可以看看課程嗎?給我們代碼夥計! \ o /任何東西!只要它仍在移動,一點點.. – 0scar

+0

順便說一句,你問最好的技術來完成你的問題,而不是示例代碼如何做到這一點。這就是爲什麼你有3個技術答案的答案。如果你想要示例代碼,然後要求示例代碼,你會得到來自多個人的示例代碼,瞭解如何使用不同的技術或使用相同的技術,但是你可以選擇更多的代碼。 –

回答

7

您可以使用java API創建對象流併發送任何可序列化的對象。但你必須記住,這些去加密通過網絡:

發件人的一面:

CustomObject objectToSend=new CustomObject(); 
Socket s = new Socket("yourhostname", 1234); 
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); 
out.writeObject(objectToSend); 
out.flush(); 

,並在接收端:

ServerSocket server = new ServerSocket(1234); 
Socket s = server.accept(); 
ObjectInputStream in = new ObjectInputStream(s.getInputStream()); 
CustomObject objectReceived = (CustomObject) in.readObject(); 
6

有很多方法可以做到這一點。這裏有一些事情要研究,你可以選擇一個最適合你的應用程序的東西。

  • J2EE
  • RMI
  • 對象序列化推動位通過套接字
  • WEBSERVICES

幾乎任何通信框架將允許你以某種方式通過網絡推對象或另一個。您只需要查看它們,看看哪些適用於您的應用程序。快速谷歌應該找到更多的方法。

2

A(事實上)標準要實現這一點,將使用網絡服務,例如使用在Java 6中捆綁的JAX-WS。請參閱this tutorial獲取java-first樣本(即使用註釋)。這非常簡單直接。

有超過其它方法,如Serialization一個Socket,RMI,EJB的,但是,在互聯網上工作的時候,Web服務是一種自然的選擇,因爲他們依賴於現有的標準(SOAP,HTTP)和與防火牆輕鬆應對(對於所有其他解決方案,這可能是實際問題)。

1

Java使用ObjectOutputStream(和ObjectInputStream)提供(二進制)對象序列化。您可以將Object()寫入流中,並在另一端寫入readObject()。你需要做的就是實現Serializable接口。

但不是手動執行此操作,您可能有興趣將它提升一級並使用遠程方法調用。使用RMI,您可以調用另一個JVM中的對象的方法,並且所有的序列化和聯網都在後臺進行。

爲了完整起見,如果不能使用二進制格式,也會有XML bean序列化。這種XML格式非常通用(閱讀:詳細和醜陋),但是有一些流行的庫(如XStream)可以創建替代的XML序列化。