2013-11-10 7 views
0

Я пытаюсь определить лучший способ передачи данных через сокет между клиентом и сервером. В настоящее время у меня есть BufferedReader, который читает по одному символу за раз (или сколько бы символов ни появлялось со времени последней итерации). Через каждую итерацию он извлекает данные, полученные до сих пор, и помещает их в массив. Когда '|' символ читается, он знает, что текущая инструкция выполнена.Чтение из входного потока сокета

Я знаю, что я до сих пор сильно неэффективен и сжигает CPU, но я немного неясен в отношении различий между всеми способами чтения из входного потока сокета. Что бы я использовал, чтобы не читать каждый символ за раз, а ждать, пока входной поток не завершит получение текущей команды (которая будет прервана «\ n»)?

+7

Если ваши команды \ n-terminated, зачем читать символ char, а не вызывать BufferedReader.readLine()? –

+0

Как я понимаю, и, возможно, я ошибаюсь, не читает readline, что сейчас находится в буфере? Итак, скажем, я посылаю слово «привет», и только «он» прибыл, разве он не только читал это? –

+1

Readline блокируется до тех пор, пока не будет прочитана полная строка. Вы получаете частичные данные только для методов read() на основе массива char. –

ответ

1

Я считаю, что лучший способ - создать новый поток для каждого сокета/клиента, который прослушивает ввод. readLine() всегда работает для меня отлично. Возможно, this может немного помочь вам.

Смежные вопросы