Потоки данных в 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|