Почему FileReader так же эффективен, как BufferedReader, при чтении фрагментов данных размером 1 КБ?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему FileReader так же эффективен, как BufferedReader, при чтении фрагментов данных размером 1 КБ?

Сообщение Anonymous »

Я пытался прочитать данные (символы) из большого текстового файла (~250 МБ) частями по 1 КБ и был очень удивлен, что чтение этого файла с помощью FileReader или BufferedReader занимает одинаковое время, даже несмотря на то, что BufferedReader имеет внутренний буфер символов размером 8 КБ, а FileReader - нет.
Код FileReader:

Код: Выделить всё

File file = new File("250mbfile.txt");
FileReader fileReader = new FileReader(file);

char[] charBuffer = new char[1024];
while(fileReader.read(charBuffer, 0, 1024) != -1) {//...};
Код BufferedReader:

Код: Выделить всё

File file = new File("250mbfile.txt");
FileReader fileReader = new FileReader(file);
BufferedReader  bufferedReader = new BufferedReader(fileReader);

char[] charBuffer = new char[1024];
while(bufferedReader.read(charBuffer, 0, 1024) != -1) {//...};
Эталон JMH:

Код: Выделить всё

Benchmark                           Mode  Cnt     Score     Error  Units
Benchmark.bufferedReaderCHARBUFFER  avgt    5  3878.794 ± 145.105  ms/op
Benchmark.fileReaderCHARBUFFER      avgt    5  3968.835 ± 160.128  ms/op
Почему им обоим требуется одинаковое время для выполнения задачи? Поскольку BufferedReader имеет буфер символов размером 8 КБ, насколько я понимаю, он должен вызывать нижележащие операции декодирования InputStreamReader один раз на каждые 8 ​​КБ (он всегда полностью заполняет буфер). FileReader должен делать то же самое один раз на 1 КБ (как указано во фрагментах). Следовательно, FileReader должен работать медленнее, поскольку необходимо вызывать больше операций декодирования.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ks-of-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»