Как указано в документации, это может произойти по трем причинам:
- Последовательная версия класса не соответствует версии дескриптора класса, считанного из потока
- Класс содержит неизвестные типы данных
- В классе нет доступного конструктора без аргументов
Итак, прежде всего убедитесь, что обе реализации имеют одинаковые serialVersionUID
. Если это так, вы должны быть уверены, что класс не использует какой-либо неопределенный (или неизвестный) тип для JVM, в которую вы пытаетесь десериализоваться. Наконец, вам нужно предоставить стандартный конструктор ClassName()
, который выполняет пустую инициализацию.
Это могут быть проблемы, и, конечно, это одна из них, так что я не думаю, что вам стоит ожидать чего-то странного. Из своего личного опыта могу также добавить, что использование разных версий JVM для сериализации и десериализации может создать эту проблему, поэтому убедитесь в этом тоже.