отменить операцию чтения - PullRequest
       6

отменить операцию чтения

2 голосов
/ 15 декабря 2009
DataInputStream in;

byte[] b = new byte[1024];
for (;;){
 in.read(b);
 //do something
}

У меня есть код выше. В другой теме я занимаюсь некоторыми другими событиями. В этой теме я хочу отменить операцию чтения, показанную в приведенном выше коде. Как я могу это сделать?

Ответы [ 6 ]

1 голос
/ 15 декабря 2009

Вам нужно использовать java.nio для чтения из вашего потока, после чего вы можете вызвать thread.interrupt() из другого потока, чтобы прервать любой текущий read.

1 голос
/ 15 декабря 2009

Что делать, если вы отправляете из другого потока некоторые данные

final byte[] TERMINATOR = ...;
in.Write(TERMINATOR)

В этом случае поток чтения может не использовать цикл for, а проверить последовательность 'terminator'.

0 голосов
/ 15 декабря 2009

Может быть, я что-то неправильно понял, но я думаю, что вы хотите использовать шаблон Observer.

0 голосов
/ 15 декабря 2009

Вы можете сбросить входной поток, если хотите:

DataInputStream in;

byte[] b = new byte[1024];
in.mark(b.length());
try {
for (;;){
 in.read(b);
 //do something
}
}
catch (InterruptedException e) {
in.reset();
}
0 голосов
/ 15 декабря 2009

Вы можете либо закрыть InputStream, с которого вы читаете, либо переработать свой код, чтобы читать данные только тогда, когда есть какие-либо данные для чтения - что может быть почти невозможно, если вы не контролируете сторону записи.

0 голосов
/ 15 декабря 2009

Вам необходимо использовать пакет java.nio, посмотрите здесь http://rox -xmlrpc.sourceforge.net / niotut /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...