2016-07-06 2 views
1
  1. Почему serialVersionUID должен быть объявлен как статический, конечный и длинный переменный тип?
  2. Уникален ли этот serialVersionUID?
  3. Что происходит, когда два или более классов содержат один и тот же serialVersionUID? Как эта версия UID будет полезной в этом случае для десериализации массива байтов?
+2

У вас есть 3 вопроса в одном. Пожалуйста, сосредоточьтесь на одном. Если первый, какие ответы вы ищете? Это должно быть статическое окончание и тип long [потому что спецификация говорит так] (http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use-it). – Tunaki

ответ

1

Это статичный, поскольку он относится к классу, а не к экземпляру.

Это окончательный вариант, потому что он не изменяется (для этой версии класса). Он изменяется только тогда, когда кто-то вносит изменения в класс, который влияет на его сериализацию.

Это длинный, потому что тип данных легко сериализуется, вписывается в компактное пространство и имеет гораздо больше значений, чем кому-либо, вероятно, потребуется.

Не обязательно быть уникальным. Если две версии класса имеют один и тот же serialversionUID, то есть нет изменений в классе, которые влияют на его сериализацию, эти две версии класса могут принимать одинаковый формат сериализации.

Не имеет значения, имеет ли два класса один и тот же serialVersionUID, он не используется между классами, он используется только для проверки совместимости сериализованной версии класса с этой версией класса.

+0

Почему гораздо проще сериализовать?Почему это не int int или короткое что-то вроде этого? Можете ли вы мне помочь, зная это, пожалуйста ... –

+1

@ user1391703: это входит в «потому что спецификация говорит так». также см. отличный ответ Эрика Липперта на http://meta.stackoverflow.com/questions/323334/is-asking-why-on-language-specifications-still-considered-as-primarily-opinio –

+0

Что такое фигурные числа? Просто погуглил, чтобы знать о том же, но не мог понять. Пожалуйста, объясните мне об этом .. –

1
  1. Почему serialVersionUID должен быть объявлен как статический, окончательный и типа длинной?

Поскольку the specification так говорит.

  1. Действительно ли serialVersionUID должен быть уникальным?

Нет, это отличает только между разными версиями вашего класса (например, составленный в разные моменты времени). Если вы пишете новый класс, вы можете установить serialVersionUID = 1L; без каких-либо проблем.

  1. Что происходит, когда два или более классов содержат один и тот же serialVersionUID? Как будет использоваться serialVersionUID в этом случае для десериализации массива байтов?

Два или более классов могут объявлять один и тот же serialVersionUID. Фактический формат проводов содержит полное имя класса, поэтому нет никакой двусмысленности.

Если serialVersionUID в загружаемых данных не соответствует идентификатору serialVersionUID вашего класса, будет выбрано значение InvalidClassException.

Смежные вопросы