Необходимость Buffered Stream в Java

91
22 ноября 2021, 16:50

Всегда ли лучше использовать BufferedStream вместо обычного IOStream? В каких ситуациях лучше не использовать Buffered?

Answer 1

Чтобы ответить на этот вопрос, надо помнить, что программа Java находится в оперативной памяти и работает очень быстро. Неприятности начинаются, когда надо получить данные с медленного устройства, например жёсткого диска. Современные SDD шустрые, но всё равно медленнее оперативной памяти. Самое неприятное, что любое обращение к файлу, пусть даже чтение одного байта - задача достаточно тяжеловесная, так как происходит нативный запрос к ОС.

BufferedInputStream пытается минимизировать обращения к жёсткому диску. Он читает сразу 8192 байт и сохраняет их в своём буфере. Когда программа запрашивает байтик информации, BIS просто отдаёт его из своего буфера, это происходит на скорости оперативной памяти, то есть моментально. Надо добавить, что и жёсткие диски отдают информацию не побайтово, а пачками, так что, с точки зрения производительности все счастливы.

Кстати, эксперименты показали, что есть решения пошустрее. Тот же класс FileChannel из Java NIO. Если приходится лопатить большие объёмы данных, он показывает неожиданную скорость работы, по сравнению с традиционными способами файлового ввода-вывода.

Так что да, если из файла читается больше 1 байта, то лучше делать это через буфер.

READ ALSO
Сравнить две коробки. Что не так?

Сравнить две коробки. Что не так?

На столе две коробки

175
Spring работа со сторонним API

Spring работа со сторонним API

Изучаю Spring и вот хочу реализовать работу с методами внешнего API

181
Генерация строки

Генерация строки

Подскажите, как генерировать строку если есть алфавит:

108