КАТЕГОРИИ: Архитектура-(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 Классы байтовых потоков
Классы символьных потоков Определены в двух иерархиях классов: Reader и Writer. Они обрабатывают потоки символов Unicode. Абстрактные классы Reader и Writer определяют методы read(), write(), которые реализуются другими поточными классами.
Таблица 4.2 Классы символьных потоков
Предопределённые потоки Все программы 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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |