Главная страница

33 Java. Потоки ввода-вывода. Работа с файлами. Белорусский государственный экономический университет кафедра экономической информатики


Скачать 1.6 Mb.
НазваниеБелорусский государственный экономический университет кафедра экономической информатики
Дата06.01.2023
Размер1.6 Mb.
Формат файлаdocx
Имя файла33 Java. Потоки ввода-вывода. Работа с файлами.docx
ТипЛитература
#874813
страница9 из 13
1   ...   5   6   7   8   9   10   11   12   13

Сериализация/десириализация


Сериализация программировании) процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) восстановление начального состояния структуры данных из битовой последовательности.

Сериализация предшествует записи состояния объекта в поток, соответственно десериализация проводится в процессе извлечения или восстановления состояния объекта из потока.

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

Сериализация при работе с файлами – это простейший пример. Она необходима при передаче сложно-структурированных данных куда-либо (т.е. использования любых потоков).

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

Поэтому сериализация не только очень удобна, но и позволяет значительно упростить разработку программы, когда идет работа со сложными объектами.


Интерфейс Serializable


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

Сериализация. Класс ObjectOutputStream


Для сериализации объектов в поток используется класс

ObjectOutputStream. Он записывает данные в поток.

Для создания объекта ObjectOutputStream в конструктор

передается поток, в который производится запись:
ObjectOutputStream(OutputStream out)

Для записи данных ObjectOutputStream использует ряд методов, среди которых можно выделить следующие:

    • void close() - закрывает поток;

    • void flush() - очищает буфер и сбрасывает его содержимое в выходной поток;

    • void write(byte[] buf) - записывает в поток массив байтов;

    • void write(int val) - записывает в поток один младший байт из val;

    • void writeBoolean(boolean val) - записывает в поток значение boolean;

    • void writeByte(int val) - записывает в поток один младший байт из val;

    • void writeChar(int val) - записывает в поток значение типа char, представленное целочисленным значением;

    • void writeDouble(double val) - записывает в поток значение типа double;

    • void writeFloat(float val) - записывает в поток значение типа float;

    • void writeInt(int val) - записывает целочисленное значение int;

    • void writeLong(long val) - записывает значение типа

long;

    • void writeShort(int val) - записывает значение типа

short;

    • void writeUTF(String str) - записывает в поток строку в кодировке UTF-8;

    • void writeObject(Object obj) - записывает в поток отдельный объект.

Эти методы охватывают весь спектр данных, которые можно сериализовать.
Пример.


Результат работы программы:


1   ...   5   6   7   8   9   10   11   12   13


написать администратору сайта