Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

В свою очередь, при десериализации метод readObject должен счи­тать данные из потока in (также полученного в качестве аргумента) и вос­становить значения полей класса. При реализации этого метода можно обратиться к стандартному механизму с помощью метода:

in.defaultReadObject();

Этот метод считывает описание объекта из потока и присваивает значения соответствующих полей в текущем объекте.

Если же процедура сериализации в корне отличается от стандарт­ной, то для таких классов предназначен альтернативный интерфейс java.io.Externalizable.

При использовании этого интерфейса в поток автоматически записы­вается только идентификация класса. Сохранить и восстановить всю ин­формацию о состоянии экземпляра должен сам класс. Для этого в нем должны быть объявлены методы writeExternalO и readExtemal() интерфей­са Externalizable. Эти методы должны обеспечить сохранение состояния, описываемого полями самого класса и его суперкласса.

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

Метод writeExternal имеет сигнатуру:

void writeExternal( Object-Output out) throws lOException;

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

void readExternal(Objectlnput in) throws lOException,ClassNotFoundException;

эти значения должны быть считаны в том же самом порядке.

Классы Reader и Writer и их наследники

Рассмотренные классы - наследники InputStream и OutputStream — работают с байтовыми данными. Если с их помощью записывать или считывать текст, то сначала необходимо сопоставить каждому символу его числовой код. Такое соответствие называется кодировкой.

Известно, что Java использует кодировку Unicode, в которой симво­лы представляются двухбайтовым кодом. Байтовые потоки зачастую ра­ботают с текстом упрощенно — они просто отбрасывают старший байт каждого символа. В реальных же приложениях могут использовать раз­личные кодировки (даже для русского языка их существует несколько). Поэтому в версии Java 1.1 появился дополнительный набор классов, ос­новывающийся на типах Reader и Writer. Их иерархия представлена на рис. 15.2.