Какая разница между Printwriter и OutputStream
Во-первых, у нас есть PrintWriter
java.io.File f=new java.io.File("s.txt");
java.io.PrintWriter out=new java.io.PrintWriter(f);
out.print(5);
out.print(7);
out.close();
Тогда мы имеем выходной поток
java.io.File f=new java.io.File("s.txt");
java.io.FileOutputStream out=new java.io.FileOutputStream(f);
out.write(5);
out.write(7);
out.close();
В чем разница?
Ответы
Ответ 1
OutputStreams
предназначены для двоичных данных. Писатели (включая PrintWriter
) предназначены для текстовых данных.
Вы не можете видеть разницу в вашей конкретной ситуации, когда вы вызываете PrintWriter.write(int)
, который пишет один символ - если кодировка символов, которую вы используете, только отображает символы в один и тот же байт, для символов менее 127, тогда вы увидите тот же результат. Но если вы дадите ему другую кодировку, вы увидите разницу.
PrintWriter
также отличается тем, что он подавляет исключения IO - как и PrintStream
, который эквивалентен двоичному потоку PrintWriter
.
Ответ 2
Из этой java2novice.com ссылка Я извлек следующее, похожее на то, что сказал Джон:
ServletOutputStream: ServletResponse.getOutputStream() returns
a ServletOutputStream
подходит для записи двоичных данных в ответ. Сервлет контейнер не кодирует двоичные данные, он отправляет необработанные данные как есть.
PrintWriter: ServletResponse.getWriter()
возвращает объект PrintWriter
, который отправляет текстовый текст клиенту. PrintWriter
использует символ кодировка возвращается getCharacterEncoding()
. Если ответ кодировка символов не указана, тогда она по умолчанию кодирование символов.