У меня есть BufferedReader
(генерируется new BufferedReader(new InputStreamReader(process.getInputStream()))
). Я совершенно новичок в понятии BufferedReader
, но, на мой взгляд, у него есть три состояния:
- Строка ожидает чтения; вызов
bufferedReader.readLine
вернет эту строку мгновенно.
- Поток открыт, но нет ни одной строки, ожидающей чтения; вызов
bufferedReader.readLine
приведет к зависанию потока, пока не станет доступной строка.
- Поток закрыт; вызов
bufferedReader.readLine
вернет ноль.
Теперь я хочу определить состояние BufferedReader
, чтобы я мог определить, могу ли я безопасно читать с него, не вешая свое приложение. Основной процесс (см. Выше) общеизвестно ненадежен и поэтому может зависнуть; в этом случае я не хочу, чтобы мое хост-приложение зависало. Поэтому я реализую своего рода тайм-аут. Сначала я попытался сделать это с помощью потоков, но это стало ужасно сложно.
Вызов BufferedReader.ready()
не будет различать случаи (2) и (3) выше. Другими словами, если ready()
возвращает false, возможно, поток просто закрыт (другими словами, мой базовый процесс завершился изящно) или может зависнуть основной процесс.
Итак, мой вопрос: как мне определить, в каком из этих трех состояний находится мой BufferedReader
без фактического вызова readLine
? К сожалению, я не могу просто позвонить readLine
, чтобы проверить это, так как оно открывает мое приложение до зависания.
Я использую JDK версии 1.5.