序列化套接字

时间:2011-03-11 15:40:42

标签: java sockets serialization

我尝试了序列化套接字,但它没有用。 什么是正确的方法?

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;
    }

}

4 个答案:

答案 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”不可序列化。

您想要通过套接字序列化某些内容吗?在这种情况下,具有数据的类应该序列化而不是处理套接字的类。