通过java套接字发送对象

时间:2013-12-23 13:26:34

标签: java sockets object serialization

我正在尝试使用java套接字发送以下类的对象:

public class CommunicationObj implements Serializable{
    private String ID;
    public AuthenticationParams s = new AuthenticationParams();
    public CommunicationObj(String s){
        ID = s;
    }
    public String getID(){
        return ID;
    }
}

但是发送以下类的对象会引发异常(无法发送对象),但以下代码可以正常工作

public class CommunicationObj implements Serializable{
    private String ID;

    public CommunicationObj(String s){
        ID = s;
    }
    public String getID(){
        return ID;
    }
}

为什么AuthenticationParams对象在这里造成了这样的问题?任何帮助将不胜感激。 注意:使用的所有类和包都与服务器和客户端相同。

2 个答案:

答案 0 :(得分:1)

如果AuthenticationParamsAuthenticationParams本身的任何部分未标记为可序列化,则序列化将失败。

实际上,类的每个部分的每个部分都必须是可序列化的,或者由于某种原因无法序列化的字段应该被赋予transient修饰符,这表示该对象不应该包含在序列化中过程

答案 1 :(得分:0)

AuthenticationParams类可能无法序列化。您可以添加transient修饰符以从序列化中丢弃它,如:

public transient AuthenticationParams s = new AuthenticationParams();

但是如果你想以序列化的形式包含这个对象,那么你就没办法让AuthenticationParams类可序列化。

序列化规则:从实例引用的所有非临时对象(您要序列化的对象实例)也必须是可序列化的。

不是:您可以使用java.io.Externalizable接口来开发自定义序列化机制。