java rmi 如何返回
使用 Java RMI 返回对象
在 Java RMI(远程方法调用)中,返回对象需要确保对象是可序列化的,并且远程接口定义了返回对象的方法。以下是具体实现步骤:
定义可序列化的返回对象
返回的对象类必须实现 java.io.Serializable 接口,确保对象可以在网络上传输。

import java.io.Serializable;
public class ResultObject implements Serializable {
private String message;
public ResultObject(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
创建远程接口
远程接口需要继承 java.rmi.Remote,并声明返回对象的方法。方法必须抛出 RemoteException。
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RemoteService extends Remote {
ResultObject getResult() throws RemoteException;
}
实现远程接口
实现类需要继承 UnicastRemoteObject 并实现远程接口。在方法中返回可序列化的对象。

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class RemoteServiceImpl extends UnicastRemoteObject implements RemoteService {
public RemoteServiceImpl() throws RemoteException {
super();
}
@Override
public ResultObject getResult() throws RemoteException {
return new ResultObject("Hello from RMI server");
}
}
启动 RMI 服务器
注册远程对象到 RMI 注册表,供客户端调用。
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class RMIServer {
public static void main(String[] args) {
try {
RemoteService service = new RemoteServiceImpl();
Registry registry = LocateRegistry.createRegistry(1099);
registry.bind("RemoteService", service);
System.out.println("Server is running...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端调用远程方法
客户端通过 RMI 注册表查找远程对象,并调用返回对象的方法。
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class RMIClient {
public static void main(String[] args) {
try {
Registry registry = LocateRegistry.getRegistry("localhost", 1099);
RemoteService service = (RemoteService) registry.lookup("RemoteService");
ResultObject result = service.getResult();
System.out.println("Received: " + result.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意事项
- 确保返回的对象及其所有成员变量都是可序列化的。
- 服务器和客户端需要共享远程接口和返回对象的类定义。
- 如果返回的对象包含非序列化的字段,会导致
NotSerializableException。






