ClassCastException с использованием ObjectInputStream в серверно-клиентском приложении

Я пытаюсь отправить объект через сокеты, но когда я хочу прочитать объект в клиенте, я получаю 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

Я пробовал все с тем же результатом. Я не могу найти свою ошибку.

Спасибо за любую помощь.


person Kiss-Budai Matyas    schedule 29.04.2016    source источник


Ответы (1)


Вам нужно добавить один и тот же SerializableID к обоим классам данных, взгляните на: это

person crumbug    schedule 29.04.2016
comment
Я объявил это в обоих файлах: private static final long serialVersionUID = 1L; и теперь я получил следующую ошибку: Error0: java.io.InvalidClassException: lab05_server.Data; локальный класс несовместим: stream classdesc serialVersionUID = 1, локальный класс serialVersionUID = -5600343588571323555 - person Kiss-Budai Matyas; 29.04.2016
comment
Один класс правильный, так как он показывает идентификатор, как вы его объявили: 1, другой по-прежнему получает идентификатор по умолчанию: -5600343588571323555 - person crumbug; 29.04.2016
comment
Да, я нашел ошибку в клиенте в (Datas)ois.readObject(); часть конструктора данных не выполняется (я поставил тестовый выход). Как заставить кастинг работать? Спасибо. - person Kiss-Budai Matyas; 29.04.2016
comment
Главный вывод из ссылки - это часть, в которой говорится, что два класса должны иметь один и тот же пакет. - person crumbug; 29.04.2016
comment
Спасибо за помощь, к сожалению, мне нужны два разных пакета из-за структуры сервер-клиент, поэтому я останусь на передаче строк. В любом случае, спасибо, что выручили меня. - person Kiss-Budai Matyas; 30.04.2016