Мне сказали, что BufferedReader.readLine()
не является подходящим способом для чтения данных из clientSocket, поскольку он рассматривает строку как строку, заканчивающуюся \n
или \r
. Однако мой конечный символ для строки - \r\n
. Что я должен использовать insted буферизованного читателя?Что использовать вместо BufferedReader для сервера
ответ
мне сказали, что BufferedReader.readLine() не является подходящим методом для чтения данных из ClientSocket, потому что consideres линию в виде строки, заканчивающейся
\n
или\r
.
Вам сказали неправильно. См. Javadoc.
Однако мой конечный символ для строки - \ r \ n. Что я должен использовать insted буферизованного читателя?
Вам не нужно ничего, кроме BufferedReader
. Он распознает это как ограничитель строки. См. Javadoc.
... если я получаю строку с
\r
или\n
внутри
Там нет такого понятия.
Фактически, есть такие как вещь. Я называю это строкой, но это сообщение, которое может содержать \ r или \ n, и все, что я знаю, это то, что оно заканчивается на \ r \ n –
Существует только такая вещь, если вы лично переопределяете то, что вы подразумеваете под линией, как вы это сделали. Здесь, в реальном мире, понятие линии, содержащее терминаторы строк, не имеет смысла. – EJP
BufferedReader просто отлично. Просто прочитав javadoc, вы скажете: https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine(): «Линия считается прекращенной любым из ('\ n'), возврат каретки ('\ r'), ** или возврат каретки, за которым следует сразу строка **. –
Да, но если я получу строку с '\ r' или' \ n' inside, BufferedReader вернет мне более короткую строку, чем я ожидал, правильно? –
Если вы имеете дело с текстом, '\ r' или' \ n' означает новую строку. Если вы не имеете дело с текстом, данные как байты, забудьте понятие «строка» и используйте «InputStream». – SJuan76