2016-11-12 9 views
-1

Мне сказали, что BufferedReader.readLine() не является подходящим способом для чтения данных из clientSocket, поскольку он рассматривает строку как строку, заканчивающуюся \n или \r. Однако мой конечный символ для строки - \r\n. Что я должен использовать insted буферизованного читателя?Что использовать вместо BufferedReader для сервера

+2

BufferedReader просто отлично. Просто прочитав javadoc, вы скажете: https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine(): «Линия считается прекращенной любым из ('\ n'), возврат каретки ('\ r'), ** или возврат каретки, за которым следует сразу строка **. –

+0

Да, но если я получу строку с '\ r' или' \ n' inside, BufferedReader вернет мне более короткую строку, чем я ожидал, правильно? –

+1

Если вы имеете дело с текстом, '\ r' или' \ n' означает новую строку. Если вы не имеете дело с текстом, данные как байты, забудьте понятие «строка» и используйте «InputStream». – SJuan76

ответ

1

мне сказали, что BufferedReader.readLine() не является подходящим методом для чтения данных из ClientSocket, потому что consideres линию в виде строки, заканчивающейся \n или \r.

Вам сказали неправильно. См. Javadoc.

Однако мой конечный символ для строки - \ r \ n. Что я должен использовать insted буферизованного читателя?

Вам не нужно ничего, кроме BufferedReader. Он распознает это как ограничитель строки. См. Javadoc.

... если я получаю строку с \r или \n внутри

Там нет такого понятия.

+0

Фактически, есть такие как вещь. Я называю это строкой, но это сообщение, которое может содержать \ r или \ n, и все, что я знаю, это то, что оно заканчивается на \ r \ n –

+0

Существует только такая вещь, если вы лично переопределяете то, что вы подразумеваете под линией, как вы это сделали. Здесь, в реальном мире, понятие линии, содержащее терминаторы строк, не имеет смысла. – EJP