2013-02-11 183 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()就是一个例子。