- •Интернет технологии
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •2. Перечень тем лабораторных занятий, их содержание и объем в часах
- •3.Индивидуальные практические работы, их характеристики
- •Теоретический раздел Лекции
- •1. Общая характеристика языкаJava
- •1.1 Что такоеJava?
- •1.2 ВыполнениеJava-программы
- •1.3 Что такоеJdk?
- •1.4 Установка и использованиеJdk
- •2. СинтаксисJava.
- •2.1 Первая программа наJava
- •2.2 Комментарии
- •2.3 Константы
- •2.4 Имена
- •2.5 Примитивные типы и операции над ними.
- •2.6 Выражения
- •2.7 Операторы
- •2.7 Массивы
- •3. Объектно-ориентированное программирование в Java
- •3.1 Парадигмы программирования
- •3.2 Принципы объектно-ориентированного программирования
- •3.3 Как описать класс и подкласс
- •3.4 Абстрактные методы и классы
- •3.5 Окончательные члены и классы
- •3.6 Класс Object
- •3.7 Конструкторы класса
- •3.7 Операция new
- •3.8 Статические члены класса
- •3.9 Метод main()
- •4. Пакеты и интерфейсы
- •4.1 Пакет и подпакет
- •4.2 Права доступа к членам класса
- •4.3 Размещение пакетов по файлам
- •4.4 Импорт классов и пакетов
- •4.5 Интерфейсы
- •5. Классы-оболочки
- •5.1 Числовые классы
- •5.2 Класс Boolean
- •5.3 Класс Character
- •5.4 Класс Class
- •6. Работа со строками
- •6.1 Класс String
- •6.2 Манипуляции строками
- •6.3 Класс StringBuffer
- •6.4 Синтаксический разбор строки
- •7. Классы-коллекции
- •7.1Класс Vector
- •7.2 Класс Stack.
- •7.3 Класс Hashtable
- •7.4 Класс Properties
- •8. Система ввода/вывода в Java
- •8.1 Класс File
- •8.2 Ввод и вывод
- •9. Потоки выполнения
- •9.1 КлассThread
- •9.2 Синхронизация потоков выполнения
- •9.3 Приоритеты подпроцессов
- •9.4 Подпроцессы-демоны
- •9.5 Группы подпроцессов
- •10. Сетевые средстваJava
- •10.1 Общие принципы взаимодействия по сети
- •10.2 Работа в www
- •10.3 Работа по протоколу tcp
- •10.4 Работа по протоколу udp
- •11. Работа с бд черезJdbc
- •11.1 Связь с базами данных через jdbc
- •12.1 Удаленный интерфейс
- •12.2 Регистрация
- •12.3 Создание якорей и скелетов
- •12.4 Использование удаленных объектов
- •13. СозданиеXml-документа для описания некоторых данных
- •Глава 1. Обработка документов xml 77
- •Практический раздел
8.2 Ввод и вывод
Библиотеки ввода/вывода часто используют абстракцию потока, который представляется любым источником данных или представляется как объект, способный производить или принимать кусочки данных. Поток прячет детали того, что случается с данными внутри реального устройства ввода/вывода.
Библиотечные классы Java для ввода/вывода делятся на классы ввода и вывода, как вы можете увидеть, взглянув на иерархию Java классов в онлайн документации с помощью вашего Web броузера. При наследовании, все, что наследуется от классов InputStream или Reader, имеет основной метод, называемый read( ) для чтения единичного байта или массива байт. Точно так же, все, что наследуется от классов OutputStream или Writer, имеет основной метод, называемый write( ) для записи единичного байта или массива байт. Однако чаще всего вы не можете использовать эти методы; они существуют для того, чтобы другие классы могли использовать их — эти другие классы обеспечивают более полезные интерфейсы. Таким образом, вы редко будете создавать ваш объект потока, используя единственный класс, вместо этого вы будите располагать множеством объектом для обеспечения желаемой функциональности. Факт в том что вы создаете более, чем один объект для создания единственного результирующего потока, это главная причина, по которой потоки Java являются запутанными.
Полезно распределить классы по категориям, исходя из их функциональности. В Java 1.0 разработчики библиотеки начали с решения, что все классы, которые могут что-то делать с вводом, должны наследоваться от InputStream, а все классы, которые ассоциируются с выводом, должны наследоваться от OutputStream.
Типы InputStream
Работа InputStream состоит в представлении классов, которые производят ввод от различных источников. Источниками могут быть:
Массив байт.
Объект String.
Файл.
“Труба”, которая работает так же, как и физическая труба: вы помещаете вещи в один конец, а они выходят из другого.
Последовательность других потоков, так что вы можете собрать их вместе в единый поток.
Другие источники, такие как Internet соединение. (Это будет обсуждено в одной из следующих глав.)
Каждый из них имеет ассоциированный подкласс InputStream. Кроме того, FilterInputStream также имеет тип InputStream, для обеспечения базового класса для "декоративных" классов, которые присоединяют атрибуты или полезные интерфейсы для входного потока. Это будет обсуждаться дальше.
Таблица 11-1. Типы InputStream
Класс |
Функция |
Аргументы конструктора |
Как его использовать |
|
|
ByteArray-InputStream |
Позволяет использовать буфер в памяти в качестве InputStream |
Буфер, их которого извлекаются байты. |
Как источник данных. Соединить его с объектом FilterInputStream для обеспечения полезного интерфейса. |
|
|
StringBuffer-InputStream |
Конвертирует String в InputStream |
String. Лежащая в основе реализация на самом деле использует StringBuffer. |
Как источник данных. Соединить его с объектом FilterInputStream для обеспечения полезного интерфейса. |
|
|
File-InputStream |
Для чтения информации из файла. |
String, представляющий имя файла, или объекты File или FileDescriptor. |
Как источник данных. Соединить его с объектом FilterInputStream для обеспечения полезного интерфейса. |
|
|
Piped-InputStream |
Производит данные, которые были записаны в ассоциированный PipedOutput-Stream. Реализует концепцию “трубопровода”. |
PipedOutputStream |
Как источник данных при нескольких нитях процессов. Соединить его с объектом FilterInputStream для обеспечения полезного интерфейса. |
|
|
Sequence-InputStream |
Преобразует два или более объектов InputStream в единый InputStream. |
Два объекта InputStream или Enumeration для контейнера из InputStream. |
Как источник данных. Соединить его с объектом FilterInputStream для обеспечения полезного интерфейса. |
|
|
Filter-InputStream |
Абстрактный класс, который является интерфейсом для декоратора, который обеспечивает полезную функциональность для других классов InputStream. |
|
Типы OutputStream
Эта категория включает классы, которые решают, куда будет производиться вывод: в массив байт (но не String; возможно, вы можете создать его, используя массив байт), в файл, или в “трубу”.
Кроме того, FilterOutputStream обеспечивает базовый класс для "декорирования" классов, которые присоединяют атрибуты или полезные интерфейсы для выходного потока. Это будет обсуждаться позже.
Таблица 11-2. Типы OutputStream
Класс |
Функция |
Аргументы конструктора |
Как его использовать |
|
|
ByteArray-OutputStream |
Создает буфер в памяти. Все данные, которые вы будете посылать в поток, помещаются в этот буфер. |
необязательный начальный размер буфера. |
Для определения места назначения ваших данных. Соедините его с объектом FilterOutputStream для обеспечения полезного интерфейса. |
|
|
File-OutputStream |
Для отсылки информации в файл. |
Строка, представляющая имя файла, или объекты File или FileDescriptor. |
Для определения места назначения ваших данных. Соедините его с объектом FilterOutputStream для обеспечения полезного интерфейса. |
|
|
Piped-OutputStream |
Любая информация, записанная сюда, автоматически становится вводом ассоциированного PipedInput-Stream. Реализует концепцию “трубопровода”. |
PipedInputStream |
Для определения назначения ваших данных со многими нитями процессов. Соедините его с объектом FilterOutputStream для обеспечения полезного интерфейса. |
|
|
Filter-OutputStream |
Абстрактный класс, который является интерфейсом для декоратора, который обеспечивает полезную функциональность другим классам OutputStream. |
|