Это может показаться легкомысленным, но PrintStream
печать в файл OutputStream
и PrintWriter
печать в файл Writer
. Хорошо, я сомневаюсь, что получу какие-то очки за утверждение очевидного. Но это еще не все.
Итак, в чем разница между an OutputStream
и a Writer
? Оба являются потоками, с основным отличием в том, что a OutputStream
- это поток байтов, а a Writer
- это поток символов.
А если имеет OutputStream
дело с байтами, что насчет PrintStream.print(String)
? Он преобразует символы в байты, используя кодировку платформы по умолчанию. Использование кодировки по умолчанию, как правило, плохо, поскольку это может привести к ошибкам при переходе с одной платформы на другую, особенно если вы создаете файл на одной платформе и используете его на другой.
С помощью a Writer
вы обычно указываете используемую кодировку, избегая каких-либо зависимостей от платформы.
Зачем иметь PrintStream
в JDK, если основная цель - писать символы, а не байты? PrintStream
предшествовал JDK 1.1, когда были введены потоки символов Reader / Writer. Я полагаю, что Sun отказался PrintStream
бы от поддержки, если бы только потому, что он так широко используется. ( В конце концов, вы не хотели бы каждый вызов , System.out
чтобы сгенерировать устаревший API предупреждение! Кроме того , изменение типа от PrintStream
до PrintWriter
на стандартных выходных потоков порвали бы существующие приложения.)