Главная » Java » Интерфейс Externalizable в Java

0

 

Интерфейс External izable является производным от Serial izable. Класс, реализующий интерфейс External izable, приобретает все полномочия по управлению состоянием объекта, подлежащего сериализации, но при этом несет и сугубую ответственность за корректную обработку данных, относящихся к базовым классам, обеспечение контроля версий и т.д. Подобная возможность необходима, например, в условиях, когда при реализации хранилища данных об объектах следует учесть некие особые ограничения, касающиеся формы представления объектов и не совместимые с существующими механизмами сериализации. В составе интерфейса External izable определены два метода:

 

public interface Externalizable extends Serializable {

void writeExternal(ObjectOutput out)

   throws lOException;

void  readExternal(Objectlnput in)

throws lOException,   ClassNotFoundException;

}

 

Методы вызываются в процессе сериализации и десериализации объекта соответственно. Это обычные методы public, и выбор требуемой реализации каждого из них определяется типом текущего объекта. Классам, производным от класса, реализующего интерфейс Externalizable, часто необходимо вызвать соответствующий метод базового класса прежде, чем будет осуществлена сериализация или десериализация их собственного состояния, — в отличие от классов, реализующих схему сериализации, принятую по умолчанию.

   Просим еще раз обратить внимание на то обстоятельство, что названные ме тоды обозначены модификатором public и поэтому могут вызываться кем угодно в любой ситуации. В частности, некая злонамеренная программа способна о ратиться к readExternal, чтобы заставить объект изменить состояние на какое-либо другое, искусственно скомпонованное и загружаемое из указанного потока-Если вы занимаетесь проектированием классов,  в которых подобные  «бреши» должны быть полностью закрыты, следует либо отказаться от реализации интерфейса Externalizable, либо предусмотреть только однократную возможность вызова метода readExternal, либо же, наконец, исключить ее полностью, если объект был создан "обычным" образом, посредством конструктора.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии