2014-02-05 2 views
0

У меня есть набор программ для сервера и клиента, над которым я работаю, и прямо сейчас у меня возникают проблемы с протоколом, потому что новая строка в конце инструкции println путает метаданные.Что делать, если разница между PrintWriter.print и PrintWriter.println?

Другими словами, мне нужно печатать на PrintWriter без новой строки в конце. Я попробовал просто распечатать, но по какой-то причине другая программа не получает сообщение таким образом. Я попытался, ради экспериментов, добавить «\ n», «\ r» и «\ n \ r» в конец инструкции и до сих пор не получал никаких данных. Очевидно, что печать не может быть напечатана + «\ n \ r», иначе я бы получил те же результаты, используя оба метода; увы, работает только один.

Я проверил Javadocs, и он говорит, что println: «Печатает строку, а затем завершает линию».
Кто-нибудь знает, в чем разница между этими двумя методами, может привести к такому значительному поведению?

+0

Как вы создаете свой 'PrintWriter'? –

ответ

1

Из Javadoc for PrintWriter:

В отличие от класса PrintStream, если автоматическая промывка включена, это будет сделано только тогда, когда один из Println, Printf или методы форматирования вызывается, а не всякий раз, когда символ новой строки происходит для вывода. Эти методы используют собственное понятие разделителя строк, а не символ новой строки.

Если вы используете .print(), вам необходимо вручную .flush(). Просто имея \n или \r\n в вашем String делает не, так это то, что вызывает различное поведение, которое вы видите.

+0

Ничего себе, я полностью забыл об этом. Спасибо, что указали это. Глупая ошибка. – user2752635