Потоки ввода-вывода информации 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Потоки ввода-вывода информации



Java-программы выполняют ввод-вывод через потоки. Поток является абстракцией, которая или производит или потребляет информацию. Поток связывается с физическим устройством с помощью системы ввода-вывода.

Ввод Вывод

- клавиатура - консоль

- файл - файл

- сетевой разъем - сетевое соединение

Все потоки ведут себя одинаковым образом, хотя фактически физические устройства, с которыми они связаны, могут сильно различаться. Используя потоки одни и те же классы и методы ввода-вывода можно применять к устройствам любого типа, то есть поток ввода может извлекать много различных видов входных данных: из клавиатуры, из файла, из сетевого разъёма. Поток вывода также может обратиться к консоли, к файлу, к сетевому соединению (сокету). Благодаря потокам программа может выполнить ввод-вывод, не понимая различий между клавиатурой и сетью. Java реализует потоки с помощью иерархии классов, определённых в пакете java.io.

 

Байтовые и символьные потоки

Рис. 4.1. Потоки ввода-вывода

 

В Java2 определены 2 типа потоков: байтовые и символьные. Байтовые потоки представляют удобные средства для обработки ввода и вывода байтов. Используются при чтении и записи данных в двоичном коде. Символьные потоки представляют удобные средства для обработки ввода и вывода символов. Они используют Unicode и могут быть интернационализированы.

Версия Java1.0 не включала символьные потоки и весь ввод-вывод был байтовым. На самом низком уровне весь ввод-вывод всё ёщё байтовый.

 

Классы байтовых потоков

Байтовые потоки определяются в двух иерархиях классов. На верху этой иерархии два абстрактных класса: InputStream и OutputStream. Каждый из этих абстрактных классов имеет несколько конкретных подклассов, которые обрабатывают различия между разными устройствами: дисковые файлы, сетевые соединения, буферы памяти.

Абстрактные классы InputStream и OutputStream определяют несколько ключевых методов, которые реализуются другими поточными классами. Методы read(), write() переопределяются в производных классах.

 

Таблица 4.1

Классы байтовых потоков

Имя поточного класса Назначение
InputStream OutputStream Абстрактные классы, которые описывают поточный ввод и вывод
BufferedInputStream BufferedOutputStream Буферизированные потоки ввода и вывода
DataInputStream     DataOutputStream Поток ввода, который содержит методы для чтения данных стандартных типов Java; Поток вывода, который содержит методы для записи данных стандартных типов Java
FileInputStream   FileOutputStream Поток ввода, который читает из файла; Поток вывода, который записывает в файл
RandomAccessFile Поддерживает ввод-вывод файла произвольного доступа
PrintStream Поток вывода, который поддерживает методы print() и println()

 

Классы символьных потоков

Определены в двух иерархиях классов: Reader и Writer. Они обрабатывают потоки символов Unicode. Абстрактные классы Reader и Writer определяют методы read(), write(), которые реализуются другими поточными классами.

 

Таблица 4.2

Классы символьных потоков

Имя поточного класса Назначение
Reader Writer Абстрактные классы символьного потока ввода и вывода
BufferedReader BufferedWriter Буферизированные символьные потоки ввода и вывода
FileReader   FileWriter Поток ввода, который читает поток символов из файла; Выходной поток, который записывает символы в файл
StringReader   StringWriter Поток ввода, который читает из строки; Поток вывода, который записывает в строку
PrintWriter Поток вывода, который поддерживает методы print() и println()

 

Предопределённые потоки

Все программы Java автоматически импортируют пакет java.lang. Этот пакет определяет класс с именем System, который инкапсулирует некоторые аспекты исполнительной среды Java. Класс System содержит 3 предопределённые поточные переменные: in, out, err, объявленные со спецификатором public и static. Public означает, что они могут использоваться любой другой частью программы; static означает, что они могут использоваться без ссылки на конкретный объект.

Объект System.out называется потоком стандартного вывода. С ним связана консоль. Объект System.in называется потоком стандартного ввода. С ним связана клавиатура. Объект System.err называется стандартным потоком ошибок, который связан с консолью. Эти потоки могут быть переназначены на любое совместимое устройство ввода-вывода.

System.in – это объект типа InputStream; System.out, System.err – объекты типа PrintStream. Все они – байтовые потоки, хотя они обычно используются, чтобы читать и записывать символы с консоли и на консоль. Однако их можно упаковывать в символьные потоки.

Предпочтительный способ для чтения консольного ввода в Java2 заключается в использовании символьного потока. Консольной ввод выполняется с помощью считывания из объекта System.in. Чтобы получить символьный поток, который присоединен к консоли, нужно перенести (упаковать) System.in в объект типа BufferedReader (буферизированный входной поток). Обычно используется следующий его конструктор:

 

BufferedReader (Reader inputReader);

 

inputReader – поток, который связан с создающимся экземпляром класса BufferedReader;

Reader – это абстрактный класс. Один из его конкретных подклассов - InputStreamReader, который преобразовывает байты в символы.

Чтобы получить объект InputStreamReader, который связан с System.in, используется следующий конструктор:

 

InputStreamReader (InputStream inputStream);

 

Так как System.in ссылается на объект типа InputStream, его можно использовать в качестве параметра inputStream.

 

Тема 5. РАБОТА С ФАЙЛАМИ

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-09; просмотров: 173; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.116.183 (0.008 с.)