чтение двоичных данных после рефакторинга классов - PullRequest
0 голосов
/ 29 марта 2019

У меня есть старые двоичные данные, сериализованные и сохраненные в БД со старым классом 'mypackage.Myclass'

Я хотел бы изменить этот класс на mypackage.topic.Myclass и по-прежнему иметь возможность читать двоичные данные обратно (десериализация)

Я получаю сообщение об ошибке Classnotfound, когда:

                    ois = new ObjectInputStream(bos);
                    o = ois.readObject();
mypackage.topic.Myclass myclass = (mypackage.topic.Myclass) o;

Есть ли способ заставить readObject () соответствовать другому классу, а не исходному сериализованному классу? Или любой другой намек на это?

1 Ответ

0 голосов
/ 29 марта 2019

Вы можете решить эту проблему, создав класс оболочки данных с именем mypackage.Myclass.При десериализации двоичных данных вы можете сначала попытаться десериализовать их как mypackage.topic.Myclass.Когда это не удается, десериализуйте его как mypackage.Myclass и затем преобразовайте его в класс mypackage.topic.Myclass.

Вы также можете установить serialVersionUID из mypackage.topic.Myclass в serialVersionUID из mypackage.Myclass,Если вы не знаете serialVersionUID класса mypackage.Myclass или если вы не установили serialVersionUID, вы можете сгенерировать serialVersionUID, который, вероятно, используется / автоматически создается JVM с помощью этогокоманда: serialver -classpath whatever com.foo.bar.MyClass (См .: Java - Изменение serialVersionUID двоичного сериализованного объекта )

Когда классы имеют одинаковые serialVersionUID, при десериализации класса не будет ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...