【问题标题】:Serializing socket序列化套接字
【发布时间】:2011-03-11 15:40:42
【问题描述】:

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

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

}

【问题讨论】:

  • Ehm...你为什么要序列化一个Socket?
  • 我们可能希望将 Socket 对象保存在 memcached 上。这是一个有效的场景。

标签: java sockets serialization


【解决方案1】:

按照设计Socket 实例不可序列化 - 您无法保存它们或通过网络传输它们,这没有任何意义。根据您要执行的操作,您需要在每次需要时建立一个新套接字,而不是将其保存到磁盘等。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        这不起作用,因为成员变量“socket”不可序列化。

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

        【讨论】:

          猜你喜欢
          • 2018-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-22
          • 2018-07-11
          • 2013-01-01
          • 1970-01-01
          相关资源
          最近更新 更多