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