Java InputStreamReader: методы, кодировка и практические примеры
Java InputStreamReader: разбор
Класс InputStreamReader в java.io преобразует сырые байты в символы, делая его незаменимым для чтения текстовых файлов, сетевых потоков или любого байтового источника, представляющего символы.
Он расширяет абстрактный класс Reader и выступает мостом между байтовыми потоками (например, FileInputStream) и символьными потоками.
Когда символ требует несколько байт — как в UTF-8 или UTF-16 — InputStreamReader читает эти байты вместе и производит правильный символ.
Создание InputStreamReader
Начните с импорта необходимого класса:
import java.io.InputStreamReader;
Типичная инстанциация использует FileInputStream как базовый байтовый источник:
FileInputStream file = new FileInputStream("example.txt");
InputStreamReader reader = new InputStreamReader(file);
Если известна кодировка файла, укажите её для избежания ошибок интерпретации:
InputStreamReader reader = new InputStreamReader(file, Charset.forName("UTF-8"));
Использование Charset гарантирует, что ридер интерпретирует байты с намеренным набором символов.
Основные методы InputStreamReader
read()
int read()— читает один символ.int read(char[] cbuf)— заполняет массив символами.int read(char[] cbuf, int off, int len)— читает доlenсимволов вcbufначиная сoff.
Пример: чтение текстового файла в символьный массив.
import java.io.*;
class Main {
public static void main(String[] args) {
char[] buffer = new char[100];
try (FileInputStream file = new FileInputStream("input.txt");
InputStreamReader reader = new InputStreamReader(file)) {
reader.read(buffer);
System.out.println("Данные в потоке:\n" + new String(buffer));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Вывод
Данные в потоке: This is a line of text inside the file.
getEncoding()
Получает используемую ридером кодировку:
InputStreamReader defaultReader = new InputStreamReader(file);
InputStreamReader utf8Reader = new InputStreamReader(file, Charset.forName("UTF-8"));
System.out.println("Кодировка по умолчанию: " + defaultReader.getEncoding());
System.out.println("UTF-8 кодировка: " + utf8Reader.getEncoding());
Вывод
Кодировка по умолчанию: Cp1252 UTF-8 кодировка: UTF-8
Когда кодировка не указана, getEncoding() возвращает кодировку платформы по умолчанию.
Примечание: Используйте Charset.forName() для явных кодировок. Подробнее: Java Charset документация.
close()
Всегда закрывайте ридер после использования. Конструкция try-with-resources выше делает это автоматически, но можно также вызвать reader.close() явно.
Другие полезные методы
| Метод | Описание |
|---|---|
ready() | Проверяет, готов ли поток к чтению. |
mark(int readAheadLimit) | Помечает текущую позицию для последующего сброса. |
reset() | Возвращает к последней отмеченной позиции. |
Полный справочник: официальная страница InputStreamReader.
java
- Ключевое слово final в Java: переменные, методы и классы
- Оператор instanceof в Java: полное руководство с примерами
- Статические вложенные классы в Java: использование, отличия и примеры
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Паттерн Singleton в Java: как реализовать и безопасно использовать
- Рефлексия в Java: инспекция классов, методов и полей во время выполнения
- Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
- Освоение Java Scanner: подробное руководство с практическими примерами
- Освоение Java Generics: создание переиспользуемого, типобезопасного кода
- Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление