通过java套接字发送对象

通过java套接字发送对象,java,sockets,object,serialization,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

我正在尝试使用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
对象会在这里产生这样的问题?任何帮助都将不胜感激。
注意:使用的所有类和包都与服务器和客户端相同。

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


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

AuthenticationParams
类可能不可序列化。您可以添加
transient
修饰符,将其从序列化中丢弃,如下所示:

public transient AuthenticationParams s = new AuthenticationParams();
但是,如果希望在序列化形式中包含此对象,则只能使AuthenticationParams类可序列化

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


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

AuthenticationParams也可序列化吗?将来使用代码按钮“{}”-来格式化代码,而不是
标记。VincentRamdhanie解决了问题:)