Sto sviluppando un'applicazione Client-Server e ho un problema con l'attesa dei dati di input sul flusso di input.Java InputStream attendere i dati.
Ho thread dedicato alla lettura dei dati di input. Attualmente utilizza il ciclo da mantenere finché i dati non sono disponibili. (Il protocollo N.B. è il seguente: invia la dimensione del pacchetto, dite N, come int quindi invia N byte).
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
}
}
Funziona ma blocca il thread mentre il ciclo è IMO una cattiva idea. Potrei usare Thread.sleep (X) per evitare che le risorse vengano continuamente consumate dal ciclo, ma sicuramente deve esserci un modo migliore.
Inoltre, non posso fare affidamento su InputStream.read per bloccare il thread poiché parte dei dati potrebbe essere inviata dal server con ritardi. Ho provato ma ha sempre comportato un comportamento inaspettato.
Apprezzerei tutte le idee :)
InputStream.read già blocchi quando i dati non è disponibile . quindi scarta il metodo 'available'. – UmNyobe