При изменении класса может быть невозможно восстановить старые данные при десериализации, потому что даже незначительные изменения в классе могут повлечь изменение поля serialVersionUID. 1
Это поле записывается в поток при сериализации класса и при десериализации сравнивается со значением такого же поля у класса, загруженного в виртуальную машину. 1 Если значения не совпадают, инициируется исключение java.io.InvalidClassException, в противном случае выполняется десериализация объекта. 1
Чтобы избежать этого, можно вручную в классе определить поле private static final long serialVersionUID. 1 Этот приём позволит проводить десериализацию объектов старых версий классов. 1
Также при использовании интерфейса Externalizable невозможно десериализовать поля с модификатором final, поскольку все final-поля инициализируются при вызове конструктора по умолчанию, и после этого их значение уже невозможно изменить. 5