#java #serialization
#java #сериализация
Вопрос:
Если я запускаю serialver
класс и он выводит a serialVersionUID
, означает ли это обязательно и автоматически, что все в порядке, что класс действительно сериализуем, что мне больше ничего не нужно проверять?
Комментарии:
1. Нет, это не так. Это просто генерирует «хэш» класса, который вы можете использовать для однозначной идентификации текущей версии. Почти всегда лучше создать свой собственный serial. Это ничего не говорит о вашей логике и о том, будет ли класс на самом деле сериализован. Но это очень легко проверить.
2. а) Как мне сгенерировать свой собственный serial (т. Е. Какие факторы я учитываю)? б) У меня есть довольно много классов, которые мне, возможно, придется сериализовать (для хранения в HttpSession), поэтому тестирование их всех может занять слишком много времени.
3. ТЕСТИРОВАНИЕ НИКОГДА НЕ ДОЛЖНО ЗАНИМАТЬ МНОГО ВРЕМЕНИ. Фактически, в современной разработке тестирование должно происходить перед кодированием. Теперь, когда это исключено, serial — это версия вашего класса. Вы не можете десериализовать классы с разными версиями. Итак, начните с
1
, и когда вы внесете изменение, которое нарушает сериализацию, измените его на …2
.4. Какие вещи нарушат сериализацию? Добавление / удаление полей? Изменение типов? Что еще? Нашел что-то: изменения типов, влияющие на сериализацию — это то, что вы имеете в виду?
5. У вас есть какой-то объект
Apple
. Вы сохраняете его. Вы добавляете полеApple
, которое является обязательным — скажем, его разновидность. Теперь вы загружаете старыйApple
. Ой, cultivar естьnull
. Это зависит как от механики сериализации, так и от вашей собственной бизнес-логики.