Буферный читатель
BufferedReader - это буферный входной поток. Это наследует от читателя.
Цель BufferedReader состоит в том, чтобы добавить некоторую буферизацию в другие входные потоки символов.
При создании буферидатора мы указам читателя как параметр через его конструктор. BufferReader будет читать данные в считывателе в партиях, и каждый раз, когда его часть читается в буфере; После работы этой части данных в буфере, следующая часть данных читается от читателя.
Зачем мне нужна буферизация? Причина очень простая, проблемы с эффективностью! Данные в буфере фактически хранятся в памяти, в то время как необработанные данные могут храниться в жестком диске или нандфлаш; Мы знаем, что чтение данных из памяти по крайней мере в 10 раз быстрее, чем чтение данных с жесткого диска.
Тогда почему бы просто не прочитать все данные в буфер за один раз? Во -первых, может занять много времени, чтобы прочитать все данные. Во -вторых, цена памяти очень дорогая, а емкость не такая большая, как жесткий диск.
Пример:
import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.File;import java.io.InputStream;import java.io.FileReader;import java.io.IOException;import java.io.FileNotFoundException;import java.lang.SecurityException;public class BufferedReaderTest { private static окончательный int len = 5; public static void main (String [] args) {testbufferedReader (); } / ** * Функция тестирования API BufferedReader * / private static void testbufferedReader () {// Создание потока символов BufferedReader, который является Arrayletters Array Try {file file = new File ("BufferedReader.txt"); BufferedReader in = new BufferedReader (новый FileReader (файл)); // Читать 5 символов из потока символов. «abcde» для (int i = 0; i <len; i ++) {// Если вы можете продолжить читать следующий символ, прочитайте следующий символ if (in.) {// reade ‘next stear stream int tmp = in.read (); System.out.printf (" %d: %c/n", i, tmp); }} // Если «этот поток символов» не поддерживает функцию маркировки, выходите непосредственно if (! In.marksupported ()) {System.out.println ("Make не поддерживается!"); возвращаться ; } // отмечать «позиция индекса тока», то есть отметьте элемент 6 -й позиции - "f" // 1024 соответствует Marklimit in.mark (1024); // пропустить 22 символа. in.skip (22); // Читать 5 символов char [] buf = new char [len]; in.read (buf, 0, len); System.out.printf ("buf =%s/n", string.valueof (buf)); // Читать оставшиеся данные Line System.out.printf ("readline =%s/n", in.readline ()); // сбросить «индекс входного потока» в положение, отмеченное Mark (), то есть сбросить на «f». in.reset (); // Читать 5 символов из «Сбросить символ» в BUF. То есть читать «fghij» in.read (buf, 0, len); System.out.printf ("buf =%s/n", string.valueof (buf)); in.close (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (securityException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }}} Содержание BufferedReader.txt Read в программе выглядит следующим образом:
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz
Результаты работы:
0: A1: B2: C3: D4: ebuf = 01234Readline = 56789Buf = fghij
BufferedWriter
BufferedWriter - это буферный выходной поток. Это наследует от писателя.
Цель BufferedWriter - добавить некоторые функциональные возможности буферизации в другие выходные потоки символов.
BufferedWriter Buffers Data через массив символов. Когда буфер заполнен или пользователь вызывает функцию flush (), он записывает данные буфера в выходной поток.
Пример:
Импорт java.io.bufferedwriter; import java.io.file; import java.io.outputstream; импорт java.io.filewriter; import java.io.ioexception; импорт java.io.filenotfoundexception; import java.lang.securityexexexexception; импорт java.ut.scanner; 5; // Соответствует английскому письму "abcdefghijklmnopqrstuvwxyz" // private static final char [] arrayletters = "abcdefghijklmnopqrstuvwxyz"; Частный статический финальный char [] arrayletters = new char [] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'w' w ',' x ',' 'x', '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'z public static void main (string [] args) {testbufferedwriter (); } / *** Функция теста API BufferedWriter* / private static void testbufferedwriter () {// Создать буферизатор, соответствующий «потоку вывода файла» // его соответствующий размер буфера составляет 16, то есть, когда данные буфера> = 16, содержимое буфера будет автоматически записать в выходной поток. try {file file = new File ("bufferWriter.txt"); BufferedWriter Out = new BufferedWriter (New FileWriter (файл)); // Напишите первые 10 символов массива Arrayletters в выходной поток Out.write (Arrayletters, 0, 10); // написать "Line Break/n" в выходной out out.write ('/n'); out.flush (); // readuserInput (); out.close (); } catch (filenotFoundException e) {e.printstackTrace (); } catch (securityException e) {e.printstackTrace (); } catch (ioException e) {e.printstackTrace (); }} / *** Читать пользовательский ввод* / private static void readuserInput () {System.out.println ("Пожалуйста, введите текст:"); Scanner Reader = новый сканер (System.in); // ждать входной строки str = reader.next (); System.out.printf («Вход: %s/n», str); }}Запуск результата: генерируется файл «bufferwriter.txt», а содержимое файла «Abcdefghij».