Spec-Zone .ru
спецификации, руководства, описания, API
След: JavaBeans (ТМ)
Урок: Усовершенствованные Темы JavaBeans
Бобовая Персистентность
Домашняя страница > JavaBeans (ТМ) > Усовершенствованные Темы JavaBeans

Бобовая Персистентность

У боба есть свойство персистентности, когда ее свойства, поля, и информация о состоянии сохраняются к и получаются от хранения. Компонентные модели обеспечивают механизм для персистентности, которая позволяет состоянию компонентов быть сохраненным в энергонезависимом месте для более позднего извлечения.

Механизм, который делает персистентность возможной, вызывают сериализацией. Объектная сериализация означает преобразовывать объект в поток данных и писать это в хранение. Любой апплет, приложение, или инструмент, который использует тот боб, могут тогда "воссоздать" его десериализацией. Объект тогда восстанавливается его исходному состоянию.

Например, приложение Java может сериализировать Рамочное окно на машине Microsoft Windows, сериализированный файл может быть отправлен с электронной почтой машине Соляриса, и затем приложение Java может восстановить Рамочное окно к точному состоянию, которое существовало на машине Microsoft Windows.

Любой апплет, приложение, или инструмент, который использует тот боб, могут тогда "воссоздать" его десериализацией.

Все бобы должны сохраниться. Чтобы сохраниться, Ваши бобы должны поддерживать сериализацию, реализовывая любого java.io.Serializable (в справочной документации API) интерфейс, или java.io.Externalizable (в справочной документации API) интерфейс. Эти интерфейсы предлагают Вам варианты автоматической сериализации и настроенной сериализации. Если любой class в реализациях иерархии наследования class Serializable или Externalizable, тогда тот class сериализуем.

Классы, Которые Сериализуемы

Любой class сериализуем пока, который class или родительский class реализуют java.io.Serializable интерфейс. Примеры сериализуемых классов включают Component, String, Date, Vector, и Hashtable. Таким образом, любой подкласс Component class, включая Applet, может быть сериализирован. Известные классы, не поддерживающие сериализацию, включают Image, Thread, Socket, и InputStream. Попытка сериализировать объекты этих типов приведет к NotSerializableException.

API Сериализации Объекта Java автоматически сериализирует большинство полей Сериализуемого объекта к потоку хранения. Это включает типы примитивов, массивы, и строки. API не сериализирует или десериализовывает поля, которые отмечаются переходный процесс или статичные.

Управление Сериализацией

Можно управлять уровнем сериализации, которой подвергаются Ваши бобы. Три способа управлять serilization:

Сериализация значения по умолчанию: Сериализуемый Интерфейс

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

Выборочная Сериализация Используя переходное Ключевое слово

Исключить поля из сериализации в a Serializable возразите отмечают поля с transient модификатор.

transient int status;

Сериализация значения по умолчанию не будет сериализировать transient и static поля.

Выборочная Сериализация: writeObject и readObject

Если Ваш сериализуемый class содержит любой из следующих двух методов (подписи должны быть точными), то сериализация значения по умолчанию не будет иметь место.

private void writeObject(java.io.ObjectOutputStream out)
    throws IOException;
private void readObject(java.io.ObjectInputStream in)
    throws IOException, ClassNotFoundException;

Можно управлять, как больше составных объектов сериализируется при записи Ваших собственных реализаций writeObject и readObject методы. Реализация writeObject когда Вы должны осуществить больший контроль над тем, что сериализируется, когда Вы должны сериализировать объекты, которые сериализация значения по умолчанию не может обработать, или когда Вы должны добавить данные к потоку сериализации, который не является объектным элементом данных. Реализация readObject чтобы восстановить поток данных, Вы записали с writeObject.

Интерфейс Externalizable

Используйте Externalizable взаимодействуйте через интерфейс, когда Вы нуждаетесь в полном контроле над сериализацией своего боба (например при записи и читая определенный формат файла). Использовать Externalizable соедините интерфейсом с Вами, должен реализовать два метода: readExternal и writeExternal. Классы та реализация Externalizable должен иметь конструктора без параметров.


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

Предыдущая страница: Усовершенствованные Темы JavaBeans
Следующая страница: Долгосрочная Персистентность