无法从不同的包源转换java对象

时间:2016-06-30 04:24:42

标签: java sockets casting

我有两个不同的包" 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;
}

1 个答案:

答案 0 :(得分:3)

如果两个Checker类属于不同的包,则它们是不同的。确保它们在字段或类中定义的方法方面完全相同并不重要 - 它们具有不同的包层次结构,因此不相同。 您可以轻松地重现此问题,而无需对实例进行序列化或反序列化。只需尝试从一个包中声明类型Checker的变量,然后将其转换为另一个包。

为什么不将Checker提取到您的包层次结构中较高的公共包中,该包可以在front.taskback.task下方导入?