我尝试了序列化套接字,但它没有用。 什么是正确的方法?
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;
}
}
答案 0 :(得分:9)
按设计Socket
实例不可序列化 - 您无法保存或通过网络传输它们,这没有任何意义。根据您要执行的操作,您需要在每次需要时创建一个新套接字,而不是将其保存到磁盘等。
答案 1 :(得分:1)
Socket基本上是系统级别的文件描述符,类似于文件。它只是一个整数。它可以序列化,但这样做没有意义。当套接字关闭时,文件描述符不再有意义。如果你在另一台机器上使用它也没有意义。
答案 2 :(得分:1)
好吧,在套接字编程中,当你说序列化时,意味着对象应该是“可序列化的”而不是它自己的套接字。
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 ....
}
答案 3 :(得分:0)
这不起作用,因为成员变量“socket”不可序列化。
您想要通过套接字序列化某些内容吗?在这种情况下,具有数据的类应该序列化而不是处理套接字的类。