English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы будем учиться на примерах Java BufferedReader и его методах.
Класс BufferedReader пакета java.io может использоваться вместе с другими читателями для более эффективного чтения данных (в виде символов).
Он наследуется от абстрактного класса Reader.
BufferedReader поддерживает внутреннийбуфер из 8192 символов.
Во время чтения в BufferedReader часть символов будет считана с диска и храниться в внутреннем буфере. И символы будут считываться из внутреннего буфера отдельно.
Таким образом, уменьшается количество коммуникаций с диском. Это и есть причина, почему использование BufferedReader позволяет быстрее читать символы.
Чтобы создать BufferedReader,我们必须 сначала импортировать пакет java.io.BufferedReader. После импорта пакета можно создать читатель.
//Создание FileReader FileReader file = new FileReader(String file); //Создание BufferedReader BufferedReader buffer = new BufferedReader(file);
В примере выше мы создали BufferedReader с именем buffer и FileReader с именем file.
Здесь, размер внутреннего буфера BufferedReader по умолчанию составляет 8192 символов. Но мы также можем определить размер внутреннего буфера.
//Создание BufferedReader с внутренним буфером заданного размера BufferedReader buffer = new BufferedReader(file, int size);
Буфер поможет быстрее читать символы из файла.
класс BufferedReader предоставляет реализацию различных методов из Reader
read() - Читает единственный символ из внутреннего буфера читателя
read(char[] array) - Читает символы из читателя и хранит их в указанном массиве
read(char[] array, int start, int length) - Читает из читателя количество символов, равное length, и хранит их в указанном массиве начиная с позиции start
например, предположим, что у нас есть файлinput.txtс содержимым.
//Это строка текста внутри файла.
попытаемся использовать BufferedReader для чтения файла.
import java.io.FileReader; import java.io.BufferedReader; class Main { public static void main(String[] args) { //создание массива символов char[] array = new char[100]; try { //создание FileReader FileReader file = new FileReader("input.txt"); //создание BufferedReader BufferedReader input = new BufferedReader(file); //чтение символов input.read(array); System.out.println("данные файла: "); System.out.println(array); //закрыть reader input.close(); } catch(Exception e) { e.getStackTrace(); } } }
результат вывода
данными файла: //Это строка текста внутри файла.
В предыдущем примере мы создали буферный читатель под названием input. Буферный читатель связан сinput.txtссылка на файл.
FileReader file = new FileReader("input.txt"); BufferedReader input = new BufferedReader(file);
Здесь мы используем метод read() для чтения массива символов из внутреннего буфера буферного читателя.
Чтобы сбросить и пропустить указанное количество символов, можно использовать метод skip(). Например
import java.io.FileReader; import java.io.BufferedReader; public class Main { public static void main(String args[]) { //создание массива символов char[] array = new char[100]; try { //Предположим, что файл input.txt содержит следующий текст //Это строка текста внутри файла. FileReader file = new FileReader("input.txt"); //создание BufferedReader BufferedReader input = new BufferedReader(file); //пропуск 5 символов input.skip(5); //чтение символов input.read(array); System.out.println("данные после пропуска 5 символов:"); System.out.println(array); //закрыть reader input.close(); } catch (Exception e) { e.getStackTrace(); } } }
результат вывода
данные после пропуска 5 символов: является строкой текста внутри файла.
в примере выше мы использовали метод skip() для пропуска 5 символов из файлового читателя. Таким образом, символы 'T', 'h', 'i', 's' и ' ' пропущены из исходного файла.
чтобы закрыть буферизованный читатель, мы можем использовать метод close(). После вызова метода close() мы не сможем использовать читатель для чтения данных.
метод | описание |
---|---|
ready() | проверить, готов ли файловый читатель к чтению |
mark() | позиция уже прочитанных данных в маркере чтения |
reset() | сбросить метку, вернуться к позиции метки в читателе |