Estoy desarrollando una aplicación Server-Client y tengo un problema con la espera de datos de entrada en el flujo de entrada.Java InputStream espera datos.
Tengo hilo dedicado a leer datos de entrada. Actualmente usa while loop para mantener hasta que los datos estén disponibles. (El protocolo N.B. es el siguiente: envíe el tamaño del paquete, digamos N, como int y luego envíe N bytes).
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
}
}
Funciona, pero bloqueando el hilo por bucle while es la OMI una mala idea. Podría usar Thread.sleep (X) para evitar que el bucle consuma recursos continuamente, pero seguramente debe haber una mejor manera.
Tampoco puedo confiar en InputStream.read para bloquear el hilo porque el servidor puede enviar parte de los datos con demoras. Lo intenté, pero siempre resultó en un comportamiento inesperado.
lo agradecería cualquier idea :)
InputStream.read ya bloques cuando los datos no están disponibles . así que descarta el método 'disponible'. – UmNyobe