Spec-Zone .ru
спецификации, руководства, описания, API
След: Именование Java и Интерфейс Каталога
Урок: Объекты Java в Каталоге
Сериализуемые Объекты
Домашняя страница > Именование Java и Интерфейс Каталога > Объекты Java в Каталоге

Сериализуемые Объекты

Сериализировать объект означает преобразовывать его состояние в поток байтов так, чтобы поток байтов мог вернуться назад в копию объекта. Объект Java сериализуем, если его class или какой-либо из его суперклассов реализуют или интерфейс java.io.Serializable или его подынтерфейс, java.io.Externalizable. Десериализация является процессом преобразования сериализированной формы объекта назад в копию объекта.

Например, java.awt.Button, class реализует интерфейс Serializable, таким образом, можно сериализировать объект java.awt.Button и хранилище, которое сериализировало состояние в файле. Позже, можно считать назад сериализированное состояние и десериализовать в объект java.awt.Button.

Платформа Java определяет значение по умолчанию путь, которым сериализируются сериализуемые объекты. (Java) class может переопределить эту сериализацию значения по умолчанию и определить ее собственный способ сериализировать объекты того class. Объектная Спецификация Сериализации описывает объектную сериализацию подробно.

Когда объект сериализируется, информация, которая идентифицирует ее class, записывается в сериализованном потоке. Однако, определение class ("файл class") непосредственно не записывается. Это - ответственность системы, которая десериализовывает объект определить, как определить местоположение и загрузить необходимые файлы class. Например, приложение Java могло бы включать в его путь к классу файл JAR, который содержит файлы class сериализированного объекта (ов), или загрузите определения class при использовании информации, хранившей в каталоге, как объяснено позже в этом уроке.

Привязка Сериализуемого Объекта

Можно хранить сериализуемый объект в каталоге, если базовый поставщик услуг поддерживает то действие, так что делает поставщика услуг Sun LDAP.

Следующий пример вызывает Context.bind связывать кнопку AWT с именем "cn=Button". Чтобы связать атрибуты с новой привязкой, Вы используете DirContext.bind. Чтобы перезаписать существующую привязку, использовать Context.rebind и DirContext.rebind.

// Create the object to be bound
Button b = new Button("Push me");

// Perform the bind
ctx.bind("cn=Button", b);

Можно тогда считать объект назад использование Context.lookup, следующим образом.

// Check that it is bound
Button b2 = (Button)ctx.lookup("cn=Button");
System.out.println(b2);

Выполнение this example производит следующий вывод.

# java SerObj
java.awt.Button[button0,0,0,0x0,invalid,label=Push me]

Определение Кодовой базы


Отметьте: процедуры, описанные здесь, для того, чтобы связать сериализуемый объект в службе каталогов, которая следует за схемой, определенной в RFC 2713. Эти процедуры не могли бы быть обычно применимыми к другому именованию и службам каталогов, которые поддерживают привязку сериализуемого объекта с указанной кодовой базой.


Когда сериализированный объект связывается в каталоге как показано в предыдущем примере, у приложений, которые читают сериализированный объект из каталога, должен быть доступ к определениям class, необходимым, чтобы десериализовать объект.

Альтернативно, можно записать кодовую базу с сериализированным объектом в каталоге, или когда Вы связываете объект или впоследствии добавляя атрибут при использовании DirContext.modifyAttributes. Можно использовать любой атрибут, чтобы записать эту кодовую базу и считать Ваше приложение, что атрибут из каталога и использует это соответственно. Или можно использовать атрибут "javaCodebase", определенный в. В последнем случае поставщик услуг Sun LDAP будет автоматически использовать атрибут, чтобы загрузить определения class как необходимый. "javaCodebase" должен содержать URL каталога кодовой базы или файла JAR. Если кодовая база содержит больше чем один URL, то каждый URL должен быть разделен пробелом.

Следующий пример напоминает тот для того, чтобы связать java.awt.Button. Это отличается, в котором это использует определяемый пользователем Serializable class, Flower, и предоставляет атрибут "javaCodebase", который содержит расположение определения class Flower. Вот код, который делает привязку.

String codebase = ...;

// Create the object to be bound
Flower f = new Flower("rose", "pink");

// Perform the bind and specify the codebase
ctx.bind("cn=Flower", f, new BasicAttributes("javaCodebase", codebase));

Когда Вы работаете this example, следует предоставить URL расположения, в котором файл class был установлен Flower.class. Например, если бы Flower.class был установлен в веб-сервере web1 в каталоге example/classes, то Вы выполнили бы этот пример следующим образом.

# java SerObjWithCodebase http://web1/example/classes/
pink rose

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


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Хранение и Чтение Объектов
Следующая страница: Новые функции в JDK 5.0 и JDK 6