Страницы

Поиск по вопросам

четверг, 27 февраля 2020 г.

Использование BufferedReader в Java

#java


Изучаю Java. В литературе и на многих ресурсах пишется, что использование буферезированного
ввода данных является наиболее эффективным, с точки зрения производительности. Но нигде
не говорится, за счет чего достигается эта эффективность. 

Может кто нибудь просвятить по этому вопросу?  
    


Ответы

Ответ 1



Когда вы используете BufferedReader, вы делаете меньше запросов к нижележащему Reader, а он в свою очередь делает меньше запросов к InputStream. К примеру, вы считываете файл посимвольно. Для каждого символа ваш Reader будет вызывать метод read на FileInputStream, а он в свою очередь будет вызывать низкоуровневую функцию операционной системы, которая запросит информацию в драйвера, а он запустит перемещение головки жёсткого диска и непосредственно само чтение. И так для каждого символа. Но если вы используете BufferedReader, то он сразу считает 8кб (дефолтный размер буффера) в память, и дальше посимвольное чтение не будет вызывать длинную цепочку вызовов вплоть до физического чтения с диска. Естественно, если вы считываете данные большими кусками, то BufferedReader никак не ускорит это. На самом деле все гораздо сложнее, ведь ОС или драйвер сами могут буфферизировать прочитанные данные, но вы не можете знать наверняка, как работает конкретный InputStream, и есть ли в него какой-то внутренний буффер.

Комментариев нет:

Отправить комментарий