Spec-Zone .ru
спецификации, руководства, описания, API
|
У боба есть свойство персистентности, когда ее свойства, поля, и информация о состоянии сохраняются к и получаются от хранения. Компонентные модели обеспечивают механизм для персистентности, которая позволяет состоянию компонентов быть сохраненным в энергонезависимом месте для более позднего извлечения.
Механизм, который делает персистентность возможной, вызывают сериализацией. Объектная сериализация означает преобразовывать объект в поток данных и писать это в хранение. Любой апплет, приложение, или инструмент, который использует тот боб, могут тогда "воссоздать" его десериализацией. Объект тогда восстанавливается его исходному состоянию.
Например, приложение Java может сериализировать Рамочное окно на машине Microsoft Windows, сериализированный файл может быть отправлен с электронной почтой машине Соляриса, и затем приложение Java может восстановить Рамочное окно к точному состоянию, которое существовало на машине Microsoft Windows.
Любой апплет, приложение, или инструмент, который использует тот боб, могут тогда "воссоздать" его десериализацией.
Все бобы должны сохраниться. Чтобы сохраниться, Ваши бобы должны поддерживать сериализацию, реализовывая любого java.io.Serializable
(в справочной документации API) интерфейс, или java.io.Externalizable
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 сериализирует весь объект, кроме переходных и статических полей.transient
(или static
) модификатор.Externalizable
взаимодействуйте через интерфейс и его два метода. Бобы пишутся в определенном формате файла. Serializable
интерфейс обеспечивает автоматическую сериализацию при использовании инструментов Сериализации Объекта Java. Serializable
не объявляет методов; это действует как маркер, говоря Объектные инструменты Сериализации, что Ваш боб class сериализуем. Отмечание Вашего class Serializable
средства Вы говорите виртуальной машине Java (JVM), что удостоверились свой class, будут работать с сериализацией значения по умолчанию. Вот некоторые важные моменты о работе с Serializable
интерфейс:
Serializable
должен иметь доступ к конструктору без параметров супертипа. Этого конструктора вызовут, когда объект будет "воссоздан" от a .ser
файл.Serializable
в Вашем class, если это уже реализуется в суперклассе.transient
модификатор, чтобы определить поля, которые Вы не хотите сериализированный, и определить классы, которые не сериализуемы.Исключить поля из сериализации в a Serializable
возразите отмечают поля с transient
модификатор.
transient int status;
Сериализация значения по умолчанию не будет сериализировать transient
и static
поля.
Если Ваш сериализуемый 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
соедините интерфейсом с Вами, должен реализовать два метода: readExternal
и writeExternal
. Классы та реализация Externalizable
должен иметь конструктора без параметров.