2009-12-15 2 views
2
DataInputStream in; 

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

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

ответ

1

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

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

Показания нить может в этом случае не следует использовать для цикла, но проверить для последовательности «терминатора».

0

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

1

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

0

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

DataInputStream in; 

byte[] b = new byte[1024]; 
in.mark(b.length()); 
try { 
for (;;){ 
in.read(b); 
//do something 
} 
} 
catch (InterruptedException e) { 
in.reset(); 
} 
+0

Я думаю, что вы упустили точку - настоящая проблема заключается в том, как в первую очередь вызвать «InterruptedException», и даже тогда он, вероятно, не прервет «read()», который заблокирован в операционной системе , – Alnitak

0

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

Смежные вопросы