Программирование на 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. Введение в сетевые протоколы

Реклама :





Более эффективно применение надстроек (в ООП этот шаблон называется адаптер) Надст­ройки — наложение дополнительных объектов для получения новых свойств и функций. Таким образом, необходимо создать несколько до­полнительных объектов - адаптеров к классам ввода/вывода. В java.io их еще называют фильтрами. При этом надстройка-фильтр включает в себя интерфейс объекта, на который надстраивается, поэтому может быть, в свою очередь, дополнительно надстроена.

В java.io интерфейс для таких надстроек ввода/вывода предоставля­ют классы FilterlnputStream (для входных потоков) и FilterOutputStream (для выходных потоков). Эти классы унаследованы от основных базовых классов ввода/вывода - InputStream и OutputStream, соответственно. Конструктор FilterlnputStream принимает в качестве параметра объект InputStream и имеет модификатор доступа protected.

Классы Filterl/OStream являются базовыми для надстроек и опреде­ляют общий интерфейс для надстраиваемых объектов. Потоки-надстройки не являются источниками данных. Они лишь модифицируют (расширяют) работу надстраиваемого потока.

BufferedlnputStream и BufferedOutputStream

На практике при считывании с внешних устройств ввод данных поч­ти всегда необходимо буферизировать. Для буферизации данных служат классы BufferedlnputStream и BufferedOutputStream.

BufferedlnputStream содержит массив байт, который служит буфе­ром для считываемых данных. То есть когда байты из потока считываются либо пропускаются (метод skipQ), сначала заполняется буферный массив, причем, из надстраиваемого потока загружается сразу много байт, чтобы не требовалось обращаться к нему при каждой операции read или skip. Также класс BufferedlnputStream добавляет поддержку методов mark() и reset(). Эти методы определены еще в классе InputStream, но там их реа­лизация по умолчанию бросает исключение lOException. Метод mark() запоминает точку во входном потоке, а вызов метода reset() приводит к тому, что все байты, полученные после последнего вызова mark(), будут считываться повторно, прежде, чем новые байты начнут поступать из надстроенного входного потока.

BufferedOutputStream предоставляет возможность производить многократную запись небольших блоков данных без обращения к устрой­ству вывода при записи каждого из них