【问题标题】:ClassCastException using ObjectInputStream in server-client application在服务器-客户端应用程序中使用 ObjectInputStream 的 ClassCastException
【发布时间】:2016-04-29 23:55:39
【问题描述】:

我正在尝试通过套接字发送对象,但是当我想在客户端中读取对象时,我得到了 java.lang.ClassCastException。

我的对象如下,我在两个项目(服务器和客户端)中都有它。

class Data implements Serializable{

    int height;
    int width;
    int max;
    int zoom;
    int start;
    int end;
    int xMove;
    int yMove;

    public Data(int height, int width, int max, int zoom, int start, int end, int xMove, int yMove){
        this.height = height;
        this.width = width;
        this.max = max;
        this.zoom = zoom;
        this.start = start;
        this.end = end;
        this.xMove = xMove;
        this.yMove = yMove;
    }
}

发送部分:

try{
    Data dataToSend = new Data(height, width, max, zoom, start, end, xMove, yMove);
    out.writeObject(dataToSend);
}

接收器部分:

try{
    InputStream is = socket.getInputStream();
    Data dataToRead = (Data)ois.readObject();
}

还有错误信息:

java.lang.ClassCastException: lab05_server.Data cannot be cast to lab05_kliens.Data

我尝试了所有方法,结果相同。 我找不到我的错误。

感谢您的帮助。

【问题讨论】:

    标签: java sockets client-server classcastexception objectinputstream


    【解决方案1】:

    您需要将相同的 SerializableID 添加到两个 Data 类中,看看:this

    【讨论】:

    • 我在两个文件中都声明了这一点:private static final long serialVersionUID = 1L;现在我收到以下错误: Error0 :java.io.InvalidClassException: lab05_server.Data;本地类不兼容:stream classdesc serialVersionUID = 1,本地类serialVersionUID = -5600343588571323555
    • 一个类是正确的,因为它显示了您声明的 ID:“1”,另一个仍然使用默认 ID:“-5600343588571323555”
    • 是的,我在 (Datas)ois.readObject(); 的客户端中发现了错误。部分数据的构造函数没有执行(我放了一个测试输出)。我怎样才能使铸造工作?谢谢。
    • 链接的主要内容是“两个类需要具有相同的包”的部分。
    • 感谢您的帮助,不幸的是,由于服务器-客户端结构,我需要两个不同的包,所以我将继续传递字符串。无论如何,谢谢你帮助我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多