Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Потоки данных в Java. Байтовые и символьные потоки. Классы байтовых потоков. Классы символьных потоков




Потоки данных в Java

Как вы могли заметить, до сих пор в примерах программ было задействовано не так много операций ввода-вывода. Фактически помимо print() и println(), никаких методов ввода-вывода в общем-то и не применялось. Причина этого проста: большинство реальных Java-приложений не являются текст-ориентированными консольными программами. Вместо этого они являются графически-ориентированными программами, которые основаны на Abstract Window Toolkit (AWT) или Swing для взаимодействия с пользователем. Хотя текст-ориентированные программы великолепны в качестве учебных примеров, они не занимают сколько-нибудь значительную часть в мире реальных программ. К тому же поддержка консольного ввода-вывода в Java ограничена и не слишком удобна в использовании — даже для простейших программ. Текстовый консольный ввод-вывод не является важным при программировании на Java. Тем не менее, Java обеспечивает мощную и гибкую поддержку ввода-вывода, когда это касается файлов и сетей. Система ввода-вывода Java целостна и последовательна. Фактически, если однажды разобраться с ее базовыми принципами, все остальное для профессионала становится простым.

Потоки

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

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

Java определяет два типа потоков: байтовые и символьные. Байтовые потоки предоставляют удобные средства для управления вводом и выводом байтов. Байтовые потоки используются, например, при чтении и записи бинарных данных. Символьные потоки предлагают удобные возможности управления вводом и выводом символов. Они используют кодировку Unicode и, таким образом, могут быть интернационализированы. Кроме того, в некоторых случаях символьные потоки более эффективны, чем байтовые.

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

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

Абстрактные классы InputStream и OutputStream определяют несколько ключевых методов, которые реализуют другие потоковые классы. Два наиболее важных – это read() и write(), которые, соответственно, читают и пишут байты данных. Оба метода объявлены как абстрактные внутри InputStream и OutputStream. В классах-наследниках они переопределяются.

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

Символьные потоки также определены в двух иерархиях классов. На их вершине находятся два абстрактных класса: Reader и Writer. Эти абстрактные классы управляют потоками символов Unicode. В Java предусмотрено несколько конкретных подклассов для каждого из них.

Абстрактные классы Reader и Writer определяют несколько ключевых методов, которые реализуют другие потоковые классы. Два наиболее важных — это read() и write(), которые, соответственно читают и пишут символьные данные. Эти методы переопределяются в потоковых классах-наследниках.

· BufferedInputStream Буферизированный входной поток.

· BufferedOutputStream Буферизированный выходной поток.

· ByteArrayInputStream Входной поток, читающий из массива байт.

· ByteArrayOutputStream Выходной поток, записывающий в массив байт.

· DataInputStream Входной поток, включающий методы для чтения стандартных типов

· данных Java.

· DataOutputStream Выходной поток, включающий методы для записи стандартных типов данных Java.

· FileInputStream Входной поток, читающий из файла.

· FileOutputStream Выходной поток, записывающий в файл.

· FilterInputStream Реализация InputStream.

· FilterOutputStream Реализация OutputStream.

· InputStream Абстрактный класс, описывающий поток ввода.

· ObjectInputStream Входной поток для объектов.

· ObjectOutputStream Выходной поток для объектов.

· OutputStream Абстрактный класс, описывающий поток вывода.

· PipedInputStream Входной канал (например, межпрограммный).

· PipedOutputStream Выходной канал.

· PrintStream Выходной поток, включающий print() и println().

· PushbackInputStream Входной поток, поддерживающий однобайтовый возврат во входной поток.

· RandomAccessFile Поддерживает файловый ввод-вывод с произвольным доступом.

· SequenceInputStream Входной поток, представляющий собой комбинацию двух и более входных потоков, которые читаются совместно — один после другого.

· BufferedReader Буферизованный входной символьный поток.

· BufferedWriter Буферизованный выходной символьный поток.

· CharArrayReader Входной поток, который читает из символьного массива.

· CharArrayWriter Выходной поток, который пишет в символьный массив.

· FileReader Входной поток, читающий файл.

· FileWriter Выходной поток, пишущий в файл.

· FilterReader Фильтрующий читатель.

· FilterWriter Фильтрующий писатель.

· InputStreamReader Входной поток, транслирующий байты в символы.

· LineNumberReader Входной поток, подсчитывающий строки.

· OutputStreamWriter Выходной поток, транслирующий байты в символы.

· PipedReader Входной канал.

· PipedWriter Выходной канал.

· PrintWriter Выходной поток, включающий print() и println().

· PushbackReader Входной поток, позволяющий возвращать символы обратно в поток.

· Reader Абстрактный класс, описывающий символьный ввод.

· StringReader Входной поток, читающий из строки.

· StringWriter Выходной поток, пишущий в строку.

· Writer Абстрактный класс, описывающий символьный вывод.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...