Недавно я попал в похожую ситуацию - у меня было несколько сериализованных объектов, которые мне нужно было прочитать, serialVersionUID
этих объектов отличалось от последней версии, и, в моем случае, было несколько разных serialVersionUID
s хранятся в файле для одного и того же класса (очевидно, в разное время). Таким образом, у меня не было роскоши изменять класс и устанавливать его serialVersionUID
; Я действительно должен был войти и изменить сохраненные данные.
Что я понял (прочитав исходный код java.io), так это то, что объект сериализуется сначала сохранением имени класса (используя writeUTF()
), а затем сразу после использования writeLong()
для сохранения serialVersionUID
.
Мое решение состояло в том, чтобы перехватить исключение, затем вернуться назад, найти имя класса и сразу после имени класса заменить старый serialVersionUID
новым.