2011-03-11 49 views
1

我试着序列化套接字但它不起作用。 什么是正确的方法?序列化套接字

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

}

+1

Ehm ...为什么要序列化一个套接字? – Chris 2011-03-11 15:44:43

+0

我们可能想将Socket对象保存在memcached上。它是一个有效的场景。 – Siddharth 2012-10-21 07:49:02

回答

9

通过设计Socket实例不是序列化 - 你不能保存或发送它们在网络上,这不会使任何意义。根据你想要做什么,你需要建立一个新的插座,每次你需要一个,而不是将其保存到磁盘等。

0

这不会工作,因为成员变量“套接字”不可序列化。

你想通过套接字序列化一些东西吗?在这种情况下,具有数据的类应该是序列化的,而不是处理套接字的类。

0

套接字基本上是系统级别上的文件描述符,类似于文件。这只是一个整数。它可以被序列化,但这样做没有意义。当套接字关闭时,文件描述符不再有意义。如果你在另一台机器上使用它也没有意义。

1

那么,在socket编程中,当你说serialize意味着对象应该是“可序列化”而不是它自己的套接字。

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