Имя Читателя многое говорит о сценарии использования.
FileReader / StringReader / CharArrayReader / InputStreamReader имеют различную реализацию для чтения из файлов, строк, CharArrays или InputStream. Использование зависит от вашего источника.
LineNumberReader / PushbackReader / BufferedReader не работают в «автономном режиме», их можно объединить с другим Source-Reader. например new BufferedReader( new FileReader(file) );
Этот Reader дает вам методы для особых случаев, которые вы можете захотеть сделать. BufferedReader
для чтения построчно или LineNumberReader для получения номера строки.
PipedReader
хорошо подходит для чтения формы данных в Части / Нити вашей Программы в другой Части / Нити в сочетании с PipedWriter
. ...
... для особых случаев вы можете создавать цепочки с помощью Reader и Writer, как шаблон Decorator.