Использует ли компилятор из разных версий JDK сериализацию с одним и тем же исходным файлом? - PullRequest
2 голосов
/ 21 мая 2009

У меня есть распределенное приложение. Клиент и серверы используют несколько общих библиотек. Клиент должен быть скомпилирован с помощью компилятора JDK 5 или с target = 1.5 (запускаться в любом месте также на PowerPC и CoreDuo Mac). Но я хотел бы использовать функции SE 6 в коде только для сервера.

Можно ли скомпилировать общие библиотеки дважды - один раз с JDK 5 и один раз с JDK 6 и сериализовать объекты на стороне клиента с использованием файлов классов, скомпилированных с JDK 5, и десериализовать их на стороне сервера с помощью файлов классов, скомпилированных с помощью JDK 6 и наоборот? Или это сломает сериализацию?

Каков наилучший способ создания библиотек, которые должны работать с кодом, скомпилированным с различными версиями JDK?

1 Ответ

5 голосов
/ 21 мая 2009

Если вы явно определили свой serialVersionUID, должен иметь возможность сериализации и десериализации в различных версиях JVM. Это своего рода точка определения этого; см спецификация :

Примечание - Настоятельно рекомендуется, чтобы все сериализуемые классы явно объявляли значения serialVersionUID, поскольку вычисления по умолчанию serialVersionUID очень чувствительны к деталям класса, которые могут различаться в зависимости от реализаций компилятора, и поэтому приводят к неожиданным конфликтам serialVersionUID во время десериализации, приводящим к сбою десериализации.

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