DataInputStream in; byte[] b = new byte[1024]; for (;;){ in.read(b); //do something }
У меня есть код выше. В другой теме я занимаюсь некоторыми другими событиями. В этой теме я хочу отменить операцию чтения, показанную в приведенном выше коде. Как я могу это сделать?
Вам нужно использовать java.nio для чтения из вашего потока, после чего вы можете вызвать thread.interrupt() из другого потока, чтобы прервать любой текущий read.
java.nio
thread.interrupt()
read
Что делать, если вы отправляете из другого потока некоторые данные
final byte[] TERMINATOR = ...; in.Write(TERMINATOR)
В этом случае поток чтения может не использовать цикл for, а проверить последовательность 'terminator'.
Может быть, я что-то неправильно понял, но я думаю, что вы хотите использовать шаблон Observer.
Вы можете сбросить входной поток, если хотите:
DataInputStream in; byte[] b = new byte[1024]; in.mark(b.length()); try { for (;;){ in.read(b); //do something } } catch (InterruptedException e) { in.reset(); }
Вы можете либо закрыть InputStream, с которого вы читаете, либо переработать свой код, чтобы читать данные только тогда, когда есть какие-либо данные для чтения - что может быть почти невозможно, если вы не контролируете сторону записи.
InputStream
Вам необходимо использовать пакет java.nio, посмотрите здесь http://rox -xmlrpc.sourceforge.net / niotut /