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