Java 串行化套接字
我尝试序列化套接字,但没有成功。 正确的方法是什么Java 串行化套接字,java,sockets,serialization,Java,Sockets,Serialization,我尝试序列化套接字,但没有成功。 正确的方法是什么 public class MySocket implements Serializable { private Socket socket; public MySocket(Socket socket) { this.socket = socket; } public Socket getSocket() { return socket; } public vo
public class MySocket implements Serializable
{
private Socket socket;
public MySocket(Socket socket) {
this.socket = socket;
}
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
}按设计
Socket
实例不可序列化-您无法保存它们或通过网络传输它们,这没有任何意义。根据您尝试执行的操作,每次需要时都需要建立一个新的套接字,而不是将其保存到磁盘等。这不起作用,因为成员变量“socket”不可序列化
是否要通过套接字序列化某些内容?在这种情况下,应该序列化包含数据的类,而不是处理套接字的类。套接字基本上是系统级的文件描述符,类似于文件。它只是一个整数。它可以序列化,但这样做没有意义。当套接字关闭时,文件描述符不再有意义。如果你在另一台机器上使用它也没有意义。在socket编程中,当你说serialize时,这意味着对象应该是“可序列化的”,而不是它本身的socket
inSomeclass's method {
...
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(new MyClass());
out.flush();
...
}
class MyClass implements Serializable {
// some sort of variables and objects, whatever ....
}
嗯。。。为什么要序列化套接字?我们可能希望将套接字对象保存在memcached上。这是一个有效的方案。