- •Первая часть
- •Интерфейсы и классы коллекций.
- •Интерфейсы:
- •Классы:
- •Итераторы:
- •Компараторы:
- •Интерфейсы и классы карт.
- •Интерфейсы:
- •Классы:
- •IndexOfSubList/lastIndexOfSubList – производит поиск “подсписка”.
- •Вторая часть
- •Сериализация объектов.
- •Байтовые потоки.
- •Символьные потоки.
- •Объектные потоки.
- •Третья часть
-
Объектные потоки.
Объектные потоки – частный случай байтовых потоков. Они позволяют записывать и считывать объекты, реализовавшие интерфейс Serializable. Если класс реализует Externalizable, класс будет сериализован в соответствии с методами readExternal и writeExternal.
Объектные потоки ввода и вывода называются ObjectInputStream и ObjectOutputStream соответственно. Они реализуют ObjectInput и ObjectOutput, предоставляющие методы как для записи и чтения объектов – writeObject/readObject, так и все методы DataOutput/DataInput для записи примитивных данных. Оба класса реализуют ObjectStreamConstants – набор констант, которые используются для определения типа данных в потоке и некоторые другие константы (версии протоколов, например, чтобы, считывающий поток знал в каком формате данные).
Так как с помощью метода writeObject в поток может быть успешно записан null, как впрочем и успешно считан методом readObject, при использовании readObject может возникнуть EOFException в том случае, если поток закончился.
Потоки реализуют интерфейс Closeable (операция close закрывает поток, после чего, он не может использоваться для чтения и записи), а начиная с версии 7, AutoCloseable, что позволяет использовать потоки в try-with конструкциях. Это позволяет легко обойти ситуацию при которой метод close выбрасывает IOException и гарантирует, что поток будет закрыт автоматически. Потоки вывода реализуют Flushable (операция flush выталкивает всю информацию из буфера и записывает её туда, куда надо).
Операции потоков связанные с чтением и записью являются блокирующими.
Поток может использоваться внутри сериализуемого объекта в методах
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException
В таком случае можно вызывать методы defaultWriteObject, putFields и writeFields, вызывающие стандартную процедуру сериализации, позволяющие получить класс для записи полей текущего класса и просто записать все поля текущего класса в поток, которые были бы записаны при стандартной сериализации. Вызов этих методов не во время сериализации объекта, за пределами этих методов, приведет к NotActiveException.
Если в процессе записи потребуется сериализовать несериализуемый объект, метод выбросит NotSerializableException.
Объекты могут быть считаны с помощью метода readObject класса ObjectInputStream. Если класс считываемого объекта ещё не был загружен java-машиной, будет произведен поиск, и в случае удачи, класс будет загружен. В противном случае, будет получен ClassNotFoundException. В случае успеха вернется Object – десереализованный объект.
Третья часть
-
Понятие процесса и нити.
-
Создание на основе класса и интерфейса, жизненный цикл, управление.
-
Синхронизация. Понятие синхронизированной секции.
-
Синхронизированные методы.
-
Приостановка и возобновление работы нитей.
-
Понятие протокола. Понятие клиент/серверного программирования.
-
Сокеты. Реализация клиента и сервера.