BufferedReader

Класс BufferedReader (в Java.io) считывает текст из потока ввода символов, буферизуя символы, чтобы обеспечить эффективное чтение символов, массивов и строк.

Ниже приведены важные моменты о BufferedReader:

Можно указать размер буфера или использовать размер по умолчанию.

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

BufferedReader и Scanner
BufferedReader (8 КБ) имеет значительно больший объем буферной памяти, чем Scanner (1 КБ). Используйте BufferedReader, если вы хотите получить длинные строки из потока, и используйте Scanner, если вы хотите проанализировать определенный тип токена из потока
Scanner может использовать tokenize с использованием настраиваемого разделителя и анализировать поток в примитивные типы данных, в то время как BufferedReader может только читать и сохранять строки.
BufferedReader является синхронным, а Scanner — нет. Используйте BufferedReader, если вы работаете с несколькими потоками.

BufferedWriter

Класс BufferedWriter (в Java.io) записывает текст в поток вывода символов, буферизуя символы, чтобы обеспечить эффективную запись отдельных символов, массивов и строк.
Ниже приведены важные моменты, касающиеся BufferedWriter:

Можно указать размер буфера или использовать размер по умолчанию.

Writer немедленно отправляет свой вывод в базовый поток символов или байтов.

Ссылки
1. http://www.tutorialspoint.com/java/io/java_io_bufferedreader.htm
2. http://www.tutorialspoint.com/java/io/java_io_bufferedwriter.htm
3. https://www.quora.com/What-exactly-is-the-difference-between-BufferedReader-and-Scanner-in-Java