2011-03-11 48 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 .... 
}