BufferedInputStream и блокировка - PullRequest
6 голосов
/ 25 августа 2011

Я использую BufferedInputStream для чтения из сокета. BufferedInputStream гласит:

socketInput.read(replyBuffer, 0, 7);

Создается

socketInput = new BufferedInputStream(mySocket.getInputStream());

mySocket определяется как private Socket mySocket;

mySocket создается mySocket = new Socket(ipAddress, port);

Я подтвердил, что mySocket подключен к моему устройству. Я могу отправить данные на свое устройство; однако, я не получаю от моего устройства по неизвестным причинам, но это не проблема.

Я хочу, чтобы мой BufferedInputStream вернулся после, скажем, 100 мс, если он не читает никаких данных. Можно ли настроить BufferedInputStream для этого? Прямо сейчас блокируется на неопределенный срок.

Ответы [ 2 ]

5 голосов
/ 25 августа 2011

Укажите 100 мс для вашего сокета. setSoTimeout

4 голосов
/ 25 августа 2011

Обычно плохая идея использовать буферизованный поток для чтения из сокета, именно по этой причине: он будет ждать вечно, если не увидит достаточно данных для заполнения своего внутреннего буфера (который будет больше 7персонажи!) Там нет никакого способа сделать это время.Просто используйте SocketInputStream напрямую, и проблема исчезнет.

...