Scanner работает медленно, но зато предоставляет очень широкий API с кучей удобных методов, а BufferedReader работает быстрее, потому что читает часть входных данных в буфер, откуда они быстрее читаются по частям, то есть обращение к консоли происходит реже. Обычно это используется в спортивном программировании. Но это далеко не полный перечень возможностей ввода/вывода, многие в спортивном программировании пишут даже свой буферизированный ввод, хотя в первом приближении BufferedReader прекрасен.