У меня есть поток, в котором read()
метод InputStream
вызывается в цикле.Если больше нет байтов для чтения, поток будет блокироваться до тех пор, пока не поступят новые данные.
Если я вызову close()
на InputStream
из другого потока, поток закроется, но заблокируется read()
звонок по-прежнему остается заблокированным.Я бы предположил, что метод read()
теперь должен возвращать со значением -1
, чтобы указать конец потока, но это не так.Вместо этого он остается заблокированным еще несколько минут, пока не истечет время ожидания tcp.
Как разблокировать вызов close()
?
Редактировать:
Очевидно, что обычная JRE немедленно выдаст SocketException
, когда поток или сокет, которому соответствует блокирующий вызов read()
, равен close()
'd.Однако среда выполнения Android Java, которую я использую, не будет.
Будем весьма благодарны за любые подсказки относительно решения для среды Android.