Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к коллоквиуму.docx
Скачиваний:
2
Добавлен:
17.11.2018
Размер:
49.95 Кб
Скачать
  1. Объектные потоки.

Объектные потоки – частный случай байтовых потоков. Они позволяют записывать и считывать объекты, реализовавшие интерфейс 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 – десереализованный объект.

Третья часть

  1. Понятие процесса и нити.

  1. Создание на основе класса и интерфейса, жизненный цикл, управление.

  1. Синхронизация. Понятие синхронизированной секции.

  1. Синхронизированные методы.

  1. Приостановка и возобновление работы нитей.

  1. Понятие протокола. Понятие клиент/серверного программирования.

  1. Сокеты. Реализация клиента и сервера.