Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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.

 




Поделиться с друзьями:


Дата добавления: 2014-12-25; Просмотров: 1709; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.