Я разрабатываю приложение Сервер-Клиент, и у меня проблема с ожиданием ввода данных в потоке ввода.
У меня есть тема, предназначенная для чтения входных данных. В настоящее время используется цикл while для удержания до тех пор, пока данные не станут доступны. (Протокол N.B. следующий: отправьте размер пакета, скажем N, как int, затем отправьте N байтов).
public void run(){
//some initialization
InputStream inStream = sock.getInputStream();
byte[] packetData;
//some more stuff
while(!interrupted){
while(inStream.available()==0);
packetData = new byte[inStream.read()];
while(inStream.available()<packetData.length);
inStream.read(packetData,0,packetData.length);
//send packet for procession in other thread
}
}
Это работает, но блокировка потока с помощью цикла while - это плохая идея. Я мог бы использовать Thread.sleep (X) для предотвращения непрерывного потребления ресурсов циклом, но, безусловно, должен быть лучший способ.
Также я не могу полагаться на InputStream.read, чтобы блокировать поток, поскольку часть данных может быть отправлена сервером с задержками. Я пытался, но это всегда приводило к неожиданному поведению.
Буду признателен за любые идеи:)