我有两个不同的包" mas.back.task.Checker"和" mas.front.task.Checker"," Checker"是类,我实现了使用bytebuffer序列化将类从客户端套接字发送到服务器套接字,我成功地序列化但是从" mas.front.task.Checker" to" mas.back.task.Checker",它在这里不起作用和错误信息:
Exception in thread "pool-1-thread-2" java.lang.ClassCastException: mas.front.task.Checker cannot be cast to mas.back.task.Checker
通过客户端套接字将类发送到服务器套接字的代码:
public static final Object convertByteToObject(byte[] bytes) {
ObjectInput in;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
in = new ObjectInputStream(bis);
return in.readObject();
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public static final byte[] convertObjectToByte(Object object) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(object);
return bos.toByteArray();
} catch (IOException ex) {
Logger.getLogger(Converter.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
我确认Checker类中的所有字段都是相同的,我也尝试了#34; Checker checker = new Checker()",但当" checker =(Checker)object" ,错误显示如上所述,所以我该如何解决这个问题呢?
注:
public class Checker implements Serializable {
public String JobID;
public String JobUserID;
public int JobInterval;
public String JobStatus;
}
答案 0 :(得分:3)
如果两个Checker
类属于不同的包,则它们是不同的。确保它们在字段或类中定义的方法方面完全相同并不重要 - 它们具有不同的包层次结构,因此不相同。 您可以轻松地重现此问题,而无需对实例进行序列化或反序列化。只需尝试从一个包中声明类型Checker
的变量,然后将其转换为另一个包。
为什么不将Checker
提取到您的包层次结构中较高的公共包中,该包可以在front.task
和back.task
下方导入?