Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Интерфейс Serializable

Интерфейс FileFilter | Класс JFileChooser | Промежуточные данные | Практическая работа | События и их реализация в JFC | Событийная модель в JFC | Слушатели событий | Класс JList библиотеки Swing | Внешний вид отображаемого списка | Практическая работа |


Читайте также:
  1. A.1. Классификация интерфейсов
  2. A.1.3. Графический интерфейс
  3. A.1.3.1. Простой графический интерфейс.
  4. A.1.3.2. WIMP - интерфейс
  5. COM-интерфейс
  6. IBM интерфейс
  7. Внутренние и внешние интерфейсы

Механизм сериализации основан на интерфейсе java.io.Serializable. Простое указание "implements Serializable" в объявлении класса и выполнение ряда простых требований позволяет сохранять/восстанавливать объекты этого класса стандартным образом.

При сохранении объектов применяется класс ObjectOutputStream, при восстановлении — ObjectInputStream.

Рассмотрим абстрактный пример. Пусть у нас в программе используется некоторый класс A и нам нужно обеспечить сохранение/восстановление объектов этого класса.

Тогда сам класс должен быть описан примерно так:

public class A implements Serializable {

...

}

 

Сохранение объектов класса A в файле может быть реализовано следующим образом.

Пусть у нас есть объект класса A и на него ссылается переменная aObj, описанная как

A aObj;

Тогда следующий фрагмент обеспечит запись этого объекта в файл "A.ser".

ObjectOutputStream out = null;

try {

out = new ObjectOutputStream(new BufferedOutputStream(

new FileOutputStream("A.ser")));

out.writeObject(aObj);

} catch (IOException ex) {

ex.printStackTrace();

}

 

Для восстановления объекта из файла может быть использован следующий фрагмент:

ObjectInputStream in = null;

A restObj = null;

try {

in = new ObjectInputStream(new BufferedInputStream(

new FileInputStream("A.ser")));

restObj = (A)in.readObject();

} catch (IOException ex) {

ex.printStackTrace();

}

 

Как видим, все достаточно просто.

Сам по себе интерфейс Serializable не имеет никаких методов и служит лишь для указания того, что мы собираемся сохранять и восстанавливать объекты, используя описанные выше возможности.

Данный пример демонстрирует лишь общую схему описания и использования сериализации. Имеется ряд дополнительных требований и опциональных возможностей сериализации, о которых нужно знать.

Во-первых, нужно сказать об ограничениях касающихся внутренних объектов сериализуемых классов. Если класс состоит из полей элементарных типов и String, то проблем нет. Но, если в состав класса A входит поле класса B, то класс B тоже должен быть сериализуемым, т.е. удовлетворять удовлетворять интерфейсу Serializable. Если это не так, то в процессе сериализации возникнет исключение NotSerializableException.

Во-вторых, в процессе сериализации/десериализации не участвуют статические поля класса, поскольку они фактически являются не полями объектов (экземпляров класса), а полями класса в целом.

И, в-третьих, нужно учитывать влияние наследования на сериализацию. Пусть класс A объявлен, как сериализуемый. На его базе создан класс B, для которого не указано implements Serializable. И, наконец, от B порожден класс C тоже сериализуемый. Тогда при сериализации будут сохранены все поля классов A и C, но не B.


Дата добавления: 2015-08-18; просмотров: 81 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Сериализация объектов| Классы ObjectOutputStream и ObjectInputStream

mybiblioteka.su - 2015-2024 год. (0.006 сек.)