Всегда ли лучше использовать BufferedStream вместо обычного IOStream? В каких ситуациях лучше не использовать Buffered?
Чтобы ответить на этот вопрос, надо помнить, что программа Java находится в оперативной памяти и работает очень быстро. Неприятности начинаются, когда надо получить данные с медленного устройства, например жёсткого диска. Современные SDD шустрые, но всё равно медленнее оперативной памяти. Самое неприятное, что любое обращение к файлу, пусть даже чтение одного байта - задача достаточно тяжеловесная, так как происходит нативный запрос к ОС.
BufferedInputStream пытается минимизировать обращения к жёсткому диску. Он читает сразу 8192 байт и сохраняет их в своём буфере. Когда программа запрашивает байтик информации, BIS просто отдаёт его из своего буфера, это происходит на скорости оперативной памяти, то есть моментально. Надо добавить, что и жёсткие диски отдают информацию не побайтово, а пачками, так что, с точки зрения производительности все счастливы.
Кстати, эксперименты показали, что есть решения пошустрее. Тот же класс FileChannel из Java NIO. Если приходится лопатить большие объёмы данных, он показывает неожиданную скорость работы, по сравнению с традиционными способами файлового ввода-вывода.
Так что да, если из файла читается больше 1 байта, то лучше делать это через буфер.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Приложение на spring4+spring-quartz
Изучаю Spring и вот хочу реализовать работу с методами внешнего API