Tengo un BufferedReader
(generado por new BufferedReader(new InputStreamReader(process.getInputStream()))
). Soy bastante nuevo en el concepto de un BufferedReader
pero como yo lo veo, tiene tres estados:¿Cómo determinar el estado exacto de un BufferedReader?
- Una línea está esperando para ser leído; llamando al
bufferedReader.readLine
devolverá esta cadena al instante. - La transmisión está abierta, pero no hay línea esperando a ser leída; llamando al
bufferedReader.readLine
colgará el hilo hasta que una línea esté disponible. - La secuencia está cerrada; llamando al
bufferedReader.readLine
devolverá nulo.
Ahora quiero determinar el estado de BufferedReader
, de modo que pueda determinar si puedo leerlo sin tener que colgar la aplicación. El proceso subyacente (ver arriba) es notoriamente poco confiable y, por lo tanto, podría haberse colgado; en este caso, no quiero que cuelgue mi aplicación host. Por lo tanto, estoy implementando un tipo de tiempo de espera. Intenté hacer esto primero con el enhebrado, pero se volvió terriblemente complicado.
Llamando BufferedReader.ready()
no distinguirá entre los casos (2) y (3) anteriores. En otras palabras, si ready()
devuelve falso, es posible que la secuencia se haya cerrado (en otras palabras, mi proceso subyacente se haya cerrado correctamente) o que el proceso subyacente se haya bloqueado.
Así que mi pregunta es: ¿cómo puedo determinar cuál de estos tres estados es BufferedReader
sin llamar realmente al readLine
? Lamentablemente, no puedo simplemente llamar al readLine
para verificar esto, ya que abre mi aplicación hasta el cuello.
Estoy utilizando la versión 1.5 de JDK.
Por cierto, estoy asumiendo por el momento que mi proceso subyacente no puede colgar en el medio de una línea .... aunque eso puede ser una suposición errónea, no ha ocurrido hasta ahora durante las pruebas y tengo suficientes otros problemas !! – Kidburla
N.B. Actualmente estoy buscando otras opciones que enhebrar. El problema es que mi aplicación no funciona en este momento (por una serie de razones, incluida la línea de lectura) y encuentro que los subprocesos son muy difíciles de depurar, especialmente si están en tiempo de espera. – Kidburla