Bufferedreader java что это
Перейти к содержимому

Bufferedreader java что это

  • автор:

Как работает bufferedreader java

BufferedReader — это класс, который обеспечивает буферизированный поток символьных данных, который читает текст из символьного входного потока, предоставляя более эффективное чтение, чем чтение каждого символа отдельно.

При создании объекта BufferedReader вы должны указать входной поток, из которого нужно читать данные. Вы можете использовать метод readLine() для чтения отдельных строк из потока.

Пример использования BufferedReader для чтения файла:

try (BufferedReader br = new BufferedReader(new FileReader("file.txt")))  String line; while ((line = br.readLine()) != null)  System.out.println(line); > > catch (IOException e)  e.printStackTrace(); > 

Этот код открывает файл «file.txt» и читает его содержимое строка за строкой с помощью BufferedReader . Затем каждая строка выводится в стандартный вывод.

Bufferedreader java что это

Класс BufferedWriter записывает текст в поток, предварительно буферизируя записываемые символы, тем самым снижая количество обращений к физическому носителю для записи данных.

Класс BufferedWriter имеет следующие конструкторы:

BufferedWriter(Writer out) BufferedWriter(Writer out, int sz)

В качестве параметра он принимает поток вывода, в который надо осуществить запись. Второй параметр указывает на размер буфера.

Например, осуществим запись в файл:

import java.io.*; public class Program < public static void main(String[] args) < try(BufferedWriter bw = new BufferedWriter(new FileWriter("notes4.txt"))) < String text = "Hello World!\nHey! Teachers! Leave the kids alone."; bw.write(text); >catch(IOException ex) < System.out.println(ex.getMessage()); >> >

Чтение текста и BufferedReader

Класс BufferedReader считывает текст из символьного потока ввода, буферизируя прочитанные символы. Использование буфера призвано увеличить производительность чтения данных из потока.

Класс BufferedReader имеет следующие конструкторы:

BufferedReader(Reader in) BufferedReader(Reader in, int sz)

Второй конструктор, кроме потока ввода, из которого производится чтение, также определяет размер буфера, в который будут считываться символы.

Так как BufferedReader наследуется от класса Reader , то он может использовать все те методы для чтения из потока, которые определены в Reader. И также BufferedReader определяет свой собственный метод readLine() , который позволяет считывать из потока построчно.

Рассмотрим применение BufferedReader:

import java.io.*; public class Program < public static void main(String[] args) < try(BufferedReader br = new BufferedReader (new FileReader("notes4.txt"))) < // чтение посимвольно int c; while((c=br.read())!=-1)< System.out.print((char)c); >> catch(IOException ex) < System.out.println(ex.getMessage()); >> >

Также можно считать текст построчно:

try(BufferedReader br = new BufferedReader(new FileReader(«notes4.txt»))) < //чтение построчно String s; while((s=br.readLine())!=null)< System.out.println(s); >> catch(IOException ex)

Считывание с консоли в файл

Соединим оба класса BufferedReader и BufferedWriter для считывания с консоли в файл. Для этого определим следующий код программы:

import java.io.*; public class Program < public static void main(String[] args) < try(BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new FileWriter("notes5.txt"))) < // чтение построчно String text; while(!(text=br.readLine()).equals("ESC"))< bw.write(text + "\n"); bw.flush(); >> catch(IOException ex) < System.out.println(ex.getMessage()); >> >

Здесь объект BufferedReader устанавливается для чтения с консоли с помощью объекта new InputStreamReader(System.in) . В цикле while считывается введенный текст. И пока пользователь не введет строку «ESC», объект BufferedWriter будет записывать текст файл.

Разница между FileReader и BufferedReader в Java

FileReader и BufferedReader — два класса, которые могут считывать символы из входного потока.

В этом туториале мы с вами рассмотрим различия между ними.

2. FileReader

Класс FileReader предназначен для чтения символьного потока из файла. К сожалению, он может читать файл только посимвольно, и каждый раз, когда мы вызываем его метод read() , он напрямую обращается к файлу на жестком диске, чтобы прочитать из него ровно один символ. В результате FileReader — очень медленный и неэффективный способ чтения символов из файлов. Кроме того, FileReader не может читать символы ни из каких типов потоков входных данных, кроме файлов.

2.1. Конструкторы

FileReader имеет три конструктора:

  • FileReader(File file) : получает в качестве аргумента экземпляр файла
  • FileReader(FileDescriptor fd) : получает в качестве аргумента дескриптор файла
  • FileReader(String fileName) : получает в качестве аргумента имя файла (включая его путь)
2.2. Что он возвращает

Каждый раз, когда мы вызываем метод read() , он возвращает целое число, представляющее значение символа в формате Unicode, который был прочитан из файла, или -1, если достигнут конец символьного потока.

2.3. Пример

Давайте посмотрим на использование FileReader в коде примера, в котором мы будем считывать символы из текстового файла, содержащего всего одну строку “qwerty”:

@Test public void whenReadingAFile_thenReadsCharByChar() < StringBuilder result = new StringBuilder(); try (FileReader fr = new FileReader("src/test/resources/sampleText2.txt")) < int i = fr.read(); while(i != -1) < result.append((char)i); i = fr.read(); >> catch (IOException e) < e.printStackTrace(); >assertEquals("qwerty", result.toString()); >

В приведенном выше коде мы приводим возвращаемое значение из метода read() к типу char, а затем добавляем его в строку результата.

3. BufferedReader

Класс BufferedReader создает буфер для хранения данных из символьного потока. Более того, входной поток может быть файлом, консолью, строкой или любым другим типом символьного потока.

Его конструктор требует в качестве входного символьного потока объект типа Reader . Следовательно, мы можем передать в качестве входного потока для чтения символов в BufferedReader любой класс, реализующий абстрактный класс Reader .

Когда мы начинаем читать символы с помощью BufferedReader , он считывает весь блок данных из входного потока и сохраняет его в буфере. После этого, если мы продолжим чтение с помощью BufferedReader , он будет возвращать символы не из исходного потока символов, а из буфера, пока полностью не опустеет. Затем он считает следующий блок данных из входного потока и сохранит его в буфере для дальнейших вызовов операций чтения.

Класс BufferedReader уменьшает количество операций чтения, вызываемых над входным потоком, а чтение из буфера обычно происходит намного быстрее, чем доступ к базовому входному потоку. Поэтому BufferedReader обеспечивает более быстрый и эффективный способ чтения символов из входного потока.

3.1. Конструкторы

BufferedReader имеет два конструктора:

  • BufferedReader(Reader in) : в качестве аргумента получает поток символьных входных данных (который должен реализовывать абстрактный класс Reader )
  • BufferedReader(Reader in, int sz) : в качестве аргументов получает символьный поток и размер буфера
3.2. Что он возвращает

Если мы вызовем метод read() , он возвращает целое число, представляющее значение символа в формате Unicode, который был прочитан из входного потока. Более того, если мы вызовем метод readLine() , он считает сразу целую строку из буфера и вернет ее как string .

3.3. Пример

Давайте посмотрим на пример использования BufferedReader для чтения символов из текстового файла, содержащего три строки:

@Test public void whenReadingAFile_thenReadsLineByLine() < StringBuilder result = new StringBuilder(); try (BufferedReader br = new BufferedReader(new FileReader("src/test/resources/sampleText1.txt"))) < String line; while((line = br.readLine()) != null) < result.append(line); result.append('\n'); >> catch (IOException e) < e.printStackTrace(); >assertEquals("first line\nsecond line\nthird line\n", result.toString()); >

Приведенный выше тестовый код выполняется без ошибок, а это означает, что BufferedReader успешно читает все три строки текста из файла.

4. В чем разница?

BufferedReader гораздо быстрее и эффективнее, чем FileReader поскольку он считывает целый блок данных из входного потока и сохраняет его в буфере для дальнейших вызовов метода чтения, в то время как FileReader должен получать доступ к файлу для считывания каждого символа. Более того, FileReader может читать файл только посимвольно, в то время как BufferedReader имеет такие полезные методы, как readLine() , который может считать из буфера сразу целую строку. И наконец, FileReader может производить чтение только из файла, а BufferedReader может читать из любого типа потока символьных входных данных (файл, консоль, строка и т.д.):

FileReader

BufferedReader

Медленнее и менее эффективен

Быстрее и эффективнее

Может читать только посимвольно

Может читать символы и строки

Можно читать только из файла

Может читать из любого символьного потока

Вам может быть достаточно и FileReader , если вы читаете из небольших файлов, или когда вызовов операции чтения не очень много. Однако для больших файлов или когда нужно выполнять много операций чтения данных, BufferedReader — это лучший вариант.

5. Заключение

В этом туториале мы с вами рассмотрели различия между FileReader и BufferedReader и когда их следует применять.

Как всегда, полный исходный код туториала доступен на GitHub.

Уже сегодня вечером состоится открытое занятие, на котором познакомимся с Reactor Kafka. На этом уроке посмотрим, как в java-приложении можно работать с Kafka в реактивном стиле. Разберемся, для чего это может быть полезно и когда стоит использовать.

Bufferedreader java что это

Текст чтений от потока ввода символов, буферизуя символы, чтобы предусмотреть эффективное чтение символов, массивов, и строк. Размер буфера может быть определен, или размер по умолчанию может использоваться. Значение по умолчанию является достаточно большим в большинстве целей. Вообще, каждая просьба чтения, сделанная из Читателя, заставляет соответствующий запрос чтения быть обращенным к базовому символьному или потоку байтов. Поэтому желательно обернуть BufferedReader вокруг любого Читателя, чей считанный () операции могут быть дорогостоящими, такими как FileReaders и InputStreamReaders. Например,

BufferedReader in = new BufferedReader(new FileReader("foo.in"));

буферизует ввод от указанного файла. Без буферизации каждый вызов чтения () или readLine () мог заставить байты быть считанными из файла, преобразовал в символы, и затем возвратился, который может быть очень неэффективным. Программы, которые используют DataInputStreams для текстового ввода, могут быть локализованы, заменяя каждый DataInputStream с соответствующим BufferedReader.

Полевая Сводка

Поля java.io унаследованный от класса. Читатель

Сводка конструктора

Создает поток ввода символов буферизации, который использует входной буфер размера по умолчанию.
Создает поток ввода символов буферизации, который использует входной буфер указанного размера.

Сводка метода

Методы

Модификатор и Тип Метод и Описание
void close()

Закрывает поток и выпускает любые системные ресурсы, связанные с этим.
Отмечает нынешнее положение в потоке.
Говорит, поддерживает ли этот поток метку () работа, которую это делает.
Читает единственный символ.
Символы чтений в часть массива.
Читает строку текста.
Говорит, готов ли этот поток быть считанным.
Сбрасывает поток к новой метке.
Символы пропусков.

Методы java.io унаследованный от класса. Читатель

Методы java.lang унаследованный от класса. Объект

Деталь конструктора

BufferedReader
public BufferedReader(Reader in, int sz)

Создает поток ввода символов буферизации, который использует входной буфер указанного размера.

BufferedReader

Создает поток ввода символов буферизации, который использует входной буфер размера по умолчанию.

Деталь метода

читать

Читает единственный символ.

читать
  • Конкретное количество символов было считано,
  • read метод базовых потоковых возвратов -1 , указание на конец файла, или
  • ready метод базовых потоковых возвратов false , указание, что далее входные запросы блокировали бы.
readLine
public String readLine() throws IOException

Читает строку текста. Строка, как полагают, завершается любым из перевода строки (‘\n’), возврат каретки (‘\r’), или возврат каретки, сопровождаемый сразу переводом строки.

пропустить

Символы пропусков.

готовый

Говорит, готов ли этот поток быть считанным. Буферизованный символьный поток готов, если буфер не пуст, или если базовый символьный поток готов.

markSupported
public boolean markSupported()

Говорит, поддерживает ли этот поток метку () работа, которую это делает.

метка

Отмечает нынешнее положение в потоке. Последующие вызовы, чтобы сбросить () будут делать попытку к репозиции потока к этой точке.

сброс

Сбрасывает поток к новой метке.

близко

Описание скопировало с класса: Reader

Закрывает поток и выпускает любые системные ресурсы, связанные с этим. Как только поток был закрыт, далее считайте (), готовый (), метка (), сбросьте (), или пропуск (), вызовы бросят IOException. Закрытие ранее закрытого потока не имеет никакого эффекта.

Платформа Java™
Стандарт Эд. 7

Представьте ошибку или функцию
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE . Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *