Назад к вопросам
Junior
73
questionbank
Какие существуют виды потоков ввода-вывода в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В Java есть две основные категории потоков ввода-вывода (java.io):
-
Байтовые потоки (Byte Streams): Работают с необработанными байтами. Используются для обработки бинарных данных (изображений, аудио, сериализованных объектов).
- Основные классы:
InputStream(для чтения) иOutputStream(для записи). - Производные классы для различных источников/приемников данных:
- Файлы:
FileInputStream,FileOutputStream - Массивы байт:
ByteArrayInputStream,ByteArrayOutputStream - Буферизация:
BufferedInputStream,BufferedOutputStream - Фильтрация/трансформация:
FilterInputStream,FilterOutputStream(родитель дляBufferedи других) - Объекты (сериализация):
ObjectInputStream,ObjectOutputStream - Ввод/вывод из консоли:
System.in(InputStream),System.out(PrintStream extends OutputStream)
- Файлы:
- Основные классы:
-
Символьные потоки (Character Streams): Работают с символами Юникода. Используются для обработки текстовых данных. Символьные потоки часто используют байтовые потоки под капотом, преобразуя байты в символы на основе заданной кодировки.
- Основные классы:
Reader(для чтения) иWriter(для записи). - Производные классы:
- Файлы:
FileReader,FileWriter - Массивы символов:
CharArrayReader,CharArrayWriter - Строки:
StringReader,StringWriter - Буферизация:
BufferedReader,BufferedWriter - Фильтрация/трансформация:
FilterReader,FilterWriter - Ввод/вывод с форматированием:
PrintWriter(для записи),Scanner(для чтения, но не является прямым потомком Reader, хотя часто используется для текстового ввода) - Ввод/вывод из консоли:
System.in(черезInputStreamReader),System.out(черезPrintWriter)
- Файлы:
- Основные классы:
Сводная таблица:
| Категория | Основа чтения | Основа записи | Работает с | Применение в основном |
|---|---|---|---|---|
| Байтовые потоки | InputStream |
OutputStream |
Байтами | Бинарные данные, низкоуровневый ввод/вывод |
| Символьные потоки | Reader |
Writer |
Символами (char) | Текстовые данные, работа с кодировками |
Пример использования:
// Чтение из файла байтовым потоком
import java.io.FileInputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("data.bin")) {
int data;
while ((data = fis.read()) != -1) {
// Обработка каждого байта
System.out.println("Byte read: " + data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// Чтение из файла символьным потоком
import java.io.FileReader;
import java.io.IOException;
public class CharStreamExample {
public static void main(String[] args) {
try (FileReader fr = new FileReader("data.txt")) {
int data;
while ((data = fr.read()) != -1) {
// Обработка каждого символа
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}