Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_po_progi_2_sem (1).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
96.34 Кб
Скачать
  1. Понятие потока данных в Java. Типы потоков.

Понятие:

При работе с данными ввода/вывода вам будет часто попадаться термин Поток (Stream). Поток - это абстрактное значение источника или приёмника данных, которые способны обрабатывать информацию. Вы в реальности не видите, как действительно идёт обработка данных в устройствах ввода/вывода, так как это сложно и вам это не нужно. Это как с телевизором - вы не знаете, как сигнал из кабеля превращается в картинку на экране, но вполне можете переключаться между каналами через пульт.

Есть два типа потоков: байтовые и символьные. В некоторых ситуациях символьные потоки более эффективны, чем байтовые.

За ввод и вывод отвечают разные классы Java. Классы, производные от базовых классов InputStream или Reader, имеют методы с именами read() для чтения отдельных байтов или массива байтов (отвечают за ввод данных). Классы, производные от классов OutputStream или Write, имеют методы с именами write() для записи одиночных байтов или массива байтов (отвечают за вывод данных).

Типы потоков:

Потоки обеспечивают последовательный ввод/вывод данных. В Java два типа потоков:

InputStream, OutputStream - байтовые потоки ввода и вывода;

Reader, Writer - символьные потоки ввода и вывода.

Список расширенных и специализированных потоков ввода/вывода:

BufferedInputStream/BufferedOutputStream - обертка на потоки ввода/вывода с поддержкой буферизации данных;

BufferedReader/BufferedWriter - обертка на символьные потоки ввода/вывода с поддержкой буферизации данных;

FileInputStream/FileOutputStream - файловые потоки ввода/вывода;

FileReader/FileWriter - потоки ввода/вывода для текстовых файлов;

PrintStream/PrintWriter - потоки для форматированного ввода/вывода;

ByteArrayInputStream/ByteArrayOutputStream - байтовые потоки ввода/вывода;

StringReader/StringWriter - символьные потоки ввода/вывода использующие строку в качестве источника;

CharArrayReader/CharArrayWriter - символьные потоки ввода/вывода использующие массив символов в качестве источника;

DataOutputStream/DataInputStream - обертка дла потоков ввода/вывода с подержкой стандартных java типов. В некоторых случаях удобней записывать примитивные данные типа double, чем иметь дело просто с бинарным или текстовым файлом. Юникодные строки обрабатываются в формате немного отличном от utf-8;

FilterInputStream/FilterOutputStream - базовые классы для оберток потоков ввода/вывода с фильтрацией данных, сами эти классы не фильтруют данных;

FilterReader/FilterWriter - базовые классы для оберток символьных потоков ввода/вывода с фильтрацией данных, сами эти классы не фильтруют данных;

StreamTokenizer - обертка для символьных потоков ввода, c поддержкой разбора слов, чисел и комментариев в стиле С/С++.

  1. Общая схема записи данных в поток и чтения данных из потока.

  1. Байтовый поток: свойства, связь потока с файлом, чтение и запись, закрытие.

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

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

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

классов InputStream и OutputStream и переопределяются производными поточными классами.

Поточный класс

Назначение

InputStream OutputStream

Абстрактные классы, которые описывают поточный ввод и вывод

BufferedInputStream BufferedOutputStream

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

ByteArrayOutputStream

Поток ввода, который читает из байт-массива Поток вывода, который записывает в байт-массив

FileInputStream FileOutputStream

Поток ввода, который читает из файла Поток вывода, который записывает в файл

RandomAccessFile

Поддерживает ввод/вывод файла произвольного доступа

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]