2013-02-11 62 views
0

RemoteObject方法的返回對象是否必須是可序列化的? 例如,A是一個遠程對象,並具有以下功能:RemoteObject方法返回值

SomeObject getMyObject() throws java.rmi.RemoteException 

並SomeObject必須是可序列化?

回答

3

那麼根據該文檔應該是:

2.6參數在遠程方法調用傳遞

一個參數,或從,返回值遠程對象可以是任何 可序列化的對象這包括原始類型遠程 對象,和非遠程對象實現該 java.io.Serializable接口。有關如何使 類可序列化的更多詳細信息,請參閱「Java對象序列化 規範」。參數或返回值的類別不在本地可用的 由RMI系統動態下載。請參閱 關於「Dynamic Class Loading」的章節,以獲取更多有關RMI 在讀取參數時下載參數和返回值類別, 返回值和例外情況的更多信息。

http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/spec/rmi-objmodel7.html

這是有道理的。對象應該從一個節點傳送到另一個節點。爲了傳輸,它應該被放置在一個插座(在某個點),所以它應該序列化。

+0

那是否包含原始類型?我的意思是,原始類型實際上是否實現了java.io.serializable? – TheNotMe 2013-02-11 22:18:27

+0

原始類型是可序列化的,因爲JVM知道如何將它們轉換爲位流,但它們不能實現任何接口,因爲它們不是對象。 – user000001 2013-02-11 22:23:51

+0

請注意,報價並不是說它必須是可序列化的。它表示它必須是'任何可序列化的對象。'*這不是一回事,正如引文中要說明的那樣。 – EJP 2013-02-12 00:28:40

1

它必須是原始類型,Serializable類型或導出的遠程對象本身。在後一種情況下,它會自動轉換爲存根。 Registry.lookup()就是一個例子。