Что делать, если разница между PrintWriter.print и PrintWriter.println?

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

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

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


person Thomas    schedule 05.02.2014    source источник
comment
Как вы создаете свой PrintWriter?   -  person Sotirios Delimanolis    schedule 05.02.2014


Ответы (1)


Из Javadoc для PrintWriter:

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

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

person Brian Roach    schedule 05.02.2014
comment
Вау, я совсем проглядел это. Спасибо, что указали на это. Глупая ошибка. - person Thomas; 05.02.2014