Освоение Java BufferedReader: эффективная обработка символьных потоков
Класс Java BufferedReader
Класс BufferedReader из пакета java.io оборачивает другой Reader для обеспечения эффективного символьного ввода. Читая блоки данных во внутренний буфер, он минимизирует затратные дисковые I/O операции.
Как работает BufferedReader
Внутренне BufferedReader поддерживает буфер 8192 символов (размер по умолчанию). При операции чтения блок символов извлекается из исходного файла и сохраняется в буфере. Последующие чтения извлекают символы из буфера по одному, резко сокращая количество обращений к диску и ускоряя I/O.
Создание BufferedReader
Импортируйте из java.io и оберните любую реализацию Reader, например FileReader:
import java.io.FileReader;
import java.io.BufferedReader;
FileReader file = new FileReader("example.txt");
BufferedReader reader = new BufferedReader(file);
Можно задать пользовательский размер буфера:
BufferedReader reader = new BufferedReader(file, 16384); // 16KB буфер
Ключевые методы BufferedReader
read()
int read()— читает один символ из буфера.int read(char[] cbuf)— читает символы в предоставленный массив.int read(char[] cbuf, int off, int len)— читает до len символов в массив начиная со смещения off.
Пример: чтение всего содержимого input.txt в символьный массив:
import java.io.FileReader;
import java.io.BufferedReader;
class Main {
public static void main(String[] args) {
char[] buffer = new char[100];
try (FileReader file = new FileReader("input.txt");
BufferedReader reader = new BufferedReader(file)) {
reader.read(buffer);
System.out.println("Данные в файле:\n" + new String(buffer));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Вывод
Данные в файле: This is a line of text inside the file.
skip()
Метод skip(long n) отбрасывает следующие n символов из потока:
reader.skip(5); // пропускает "This "
После пропуска чтение оставшегося содержимого даёт:
Данные после пропуска 5 символов: is a line of text inside the file.
close()
Всегда закрывайте ридер для освобождения системных ресурсов:
reader.close();
Другие полезные методы
| Метод | Описание |
|---|---|
ready() | Проверяет, готов ли поток к чтению без блокировки. |
mark(int readAheadLimit) | Помечает текущую позицию в потоке. |
reset() | Возвращает поток к последней отмеченной позиции. |
Полный справочник: официальная документация Java.
java
- Ключевое слово final в Java: переменные, методы и классы
- Оператор instanceof в Java: полное руководство с примерами
- Статические вложенные классы в Java: использование, отличия и примеры
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Паттерн Singleton в Java: как реализовать и безопасно использовать
- Рефлексия в Java: инспекция классов, методов и полей во время выполнения
- Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
- Освоение Java Generics: создание переиспользуемого, типобезопасного кода
- Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление
- Чтение файлов в Java с BufferedReader — Практическое руководство с примерами