我正在尝试使用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
对象在这里造成了这样的问题?任何帮助将不胜感激。
注意:使用的所有类和包都与服务器和客户端相同。
答案 0 :(得分:1)
如果AuthenticationParams
或AuthenticationParams
本身的任何部分未标记为可序列化,则序列化将失败。
实际上,类的每个部分的每个部分都必须是可序列化的,或者由于某种原因无法序列化的字段应该被赋予transient
修饰符,这表示该对象不应该包含在序列化中过程
答案 1 :(得分:0)
AuthenticationParams
类可能无法序列化。您可以添加transient
修饰符以从序列化中丢弃它,如:
public transient AuthenticationParams s = new AuthenticationParams();
但是如果你想以序列化的形式包含这个对象,那么你就没办法让AuthenticationParams类可序列化。
序列化规则:从实例引用的所有非临时对象(您要序列化的对象实例)也必须是可序列化的。
不是:您可以使用java.io.Externalizable接口来开发自定义序列化机制。