Подтвердить что ты не робот

Конкретная разница между буферизатором и файлообменником

Я хотел бы узнать конкретную разницу между BufferedReader и FileReader.

Я знаю, что BufferedReader намного эффективнее, чем FileReader, но может кто-то объяснить, почему (конкретно и подробно)? Спасибо.

4b9b3361

Ответ 1

Простым способом:

Класс FileReader - это общий инструмент для чтения символов из файла. Класс BufferedReader может обернуть вокруг Readers, например FileReader, для буферизации ввода и повышения эффективности. Таким образом, вы не будете использовать один над другим, но оба одновременно должны передать объект FileReader в конструктор BufferedReader.

Очень подробно

FileReader используется для ввода символьных данных из файла диска. Входной файл может быть обычным ASCII, по одному байту на текстовый файл символа. Поток Reader автоматически переводит символы из формата файла диска во внутренний формат char. Символы во входном файле могут быть из других алфавитов, поддерживаемых форматом UTF, и в этом случае должно быть до трех байтов на символ. В этом случае также символы из файла переводятся в формат char.

enter image description here

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

BufferedReader stdin =
    new BufferedReader(new InputStreamReader( System.in ));

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

Источник: http://www.oopweb.com/Java/Documents/JavaNotes/Volume/chap84/ch84_3.html

Ответ 2

Вы должны понимать концепцию потоковой передачи в Java, потому что все читатели в Java построены на этом.

Потоковая передача файлов Потоковая передача файлов выполняется экземпляром объекта FileInputStream в Java.

// read byte by byte and store into this variable
int byt;
while((byt = fileInputStream.read()) != -1) {
    fileOutputStream.write(byt);
} 

Эти объекты фактически читают байтовый (8-битный) по одному и записывают его в данный файл. Это хорошо, когда вы работаете с необработанным файлом данных, например изображениями или аудио (то же самое, но использует объект AudioInputStream) и т.д. но для текстовых файлов это неудобно или медленнее, потому что он тратит время на цикл. Вам также необходимо предоставить набор символов текстового файла, иначе, что бы вы ни пишете, вы не увидите в файле, вы просто увидите некоторые случайные текст и знаки.

Чтение файлов (в основном потоковое с символом) FileReader используется для чтения файлов, поэтому операция равна,

int c;
while ( (c = fileReader.read()) != -1) { // some logic }

вместо выборки байта каждый раз, он выбирает по 2 байта за раз, но все равно выполняется столько же раз, сколько и символы в вашем файле. Но лучше использовать байт, например, FileInputStream, когда вы имеете дело с файлами. Оба экземпляра используют целочисленную переменную для хранения значения, поступающего из входного файла. Поток байтов хранит 8 бит в переменную, а FileReader хранит 16 бит, но здесь вам не нужно указывать набор символов и несколько свойств, он автоматически делает это для вас, а также поддерживает интернационализацию. но он все еще медленнее.

Буферизующие потоки Теперь буферизация файлов быстрее, чем чтение файла. Это та же концепция, что и вы на YouTube. youtube буферизует некоторое количество видео до того, как оно начнет его воспроизводить, поэтому вы можете наслаждаться безупречным просмотром видео.

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

BufferedReader br = new BufferedReader( new FileReader("example.txt") );

теперь здесь буферизуемое буферизующее буферирование файла означает, что он продолжает читать файл по одному символу, пока он не нажмет символ "\n", "\ r\n" (новая строка) и сохранит извлеченные символы в строку (короче выбирает строки и сохраняет их в буфер).

String line;
while ((line = br.readLine()) != null) {
    printWriter.println(line);
}

теперь вы можете видеть вместо сохранения каждого байта или значения 2 байта в переменной int, он сохраняет всю строку в памяти и работает на ней. Но буферизатор не может работать в одиночку, потому что он просто буферизуется, поэтому вам нужно указать, какой поток вы хотите буферировать? Это может быть поток файлов, как вы видели ранее, или это может быть консоль, поскольку

BufferedReader br = new BufferedReader(new inputStreamReader(System.in));

то он сканирует целую строку с консоли. что вы используете bufferedReader.readLine() в Java для сбора ввода с консоли.

Ответ 3

BufferedReader требует Reader, из которых FileReader один - он спускается из InputStreamReader, который спускается из Reader.

Ответ 4

FileReader - чтение файлов символов

BufferedReader - "Чтение текста из потока ввода символов, буферизация символов, чтобы обеспечить эффективное считывание символов, массивов и строк".

http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html

http://docs.oracle.com/javase/7/docs/api/java/io/FileReader.html

Фактически BufferedReader использует Readers, например FileReader.

Ответ 5

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

Ответ 6

Bufferedreader - метод, который вы можете использовать в качестве замены метода Scanner, получает файл, получает вход.

FileReader - как следует из названия.