В частности, проблема заключается в том, чтобы написать такой метод:
int maybeRead(InputStream in, long timeout)
где возвращаемое значение такое же, как и in.read(), если данные доступны в течение "тайм-аута" миллисекунд и -2 в противном случае. Прежде чем метод вернется, все порожденные потоки должны выйти.
Чтобы избежать аргументов, тема здесь java.io.InputStream, как описано Sun (любая версия Java). Обратите внимание, что это не так просто, как кажется. Ниже приведены некоторые факты, которые напрямую поддерживаются документацией Sun.
-
Метод in.read() может быть не прерываемым.
-
Обтекание InputStream в Reader или InterruptibleChannel не помогает, потому что все эти классы могут выполнять вызовы методов InputStream. Если бы можно было использовать эти классы, можно было бы написать решение, которое просто выполнит ту же логику непосредственно в InputStream.
-
Это всегда приемлемо для in.available() для возврата 0.
-
Метод in.close() может блокировать или ничего не делать.
-
Нет общего способа убить другой поток.