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

191
27 марта 2019, 14:30

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

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

Answer 1

Когда вы используете BufferedReader, вы делаете меньше запросов к нижележащему Reader, а он в свою очередь делает меньше запросов к InputStream.

К примеру, вы считываете файл посимвольно. Для каждого символа ваш Reader будет вызывать метод read на FileInputStream, а он в свою очередь будет вызывать низкоуровневую функцию операционной системы, которая запросит информацию в драйвера, а он запустит перемещение головки жёсткого диска и непосредственно само чтение. И так для каждого символа.

Но если вы используете BufferedReader, то он сразу считает 8кб (дефолтный размер буффера) в память, и дальше посимвольное чтение не будет вызывать длинную цепочку вызовов вплоть до физического чтения с диска.

Естественно, если вы считываете данные большими кусками, то BufferedReader никак не ускорит это.

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

READ ALSO
Падает приложение [закрыт]

Падает приложение [закрыт]

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

153
Не вызывается контекстное меню

Не вызывается контекстное меню

Элемент Listview не реагирует на длительное нажатие и не вызывается контекстное меню

138
Вычисление производной [закрыт]

Вычисление производной [закрыт]

Для алгоритма требуется найти производнуюНе подскажете, какой библиотекой или каким-то иным способом можно это сделать? В скриншоте первый...

182