пятница, 30 ноября 2007 г.

Еще немного о сериализации

Читая новые rss-ки увидел вот этот пост.

А привлек мое внимание вот этот абзац:

Среда сериализации присваивает каждому классу, поддерживающему сериализацию номер версии, под именем serialVersionUID. Этот номер используется при восстановлении состояния объекта, чтобы убедиться, что классы отправителя и получателя сериализованного объекта совместимы между собой. Если класс получателя имеет отличный от отправителя serialVersionUID, тогда десереилазация завершится исключением InvalidClassException. Поддерживающий сериализацию класс может явно объявить собственный serialVersionUID, объявив поле с именем «serialVersionUID», которое должно быть длинным целым с модификаторами static и final.

Должен сказать довольно удобная приблуда. Без нее API пришлось бы использовать номер версии скомпилированной сборки, который может меняться при каждой компиляции, даже если определение класса не изменялось. Но при помощи serialVersionUID разработчики могут сами решать, одинаковы ли версии их классов или нет.


Интересно, почему разработчики .Net Framework'a не реализовали подобную функциональность (да похоже и не собираются)? Фактически, предложенный способ управления сериализацией находится в промежутке между xml-сериализацией и soap (когда вместе с данными еще и хранится информация о версии сборки, в которой находится описание сериализуемого класса).

Комментариев нет:

Отправить комментарий