2009-12-15 55 views
2
DataInputStream in; 

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

我有上面的代码。在另一个线程中,我正在处理一些其他事件。在这个线程中,我想取消上面代码中显示的读取操作。我能怎么做?取消读取操作

回答

1

如果你从另一个线程发送一些数据

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

读线程可以在这种情况下,不应该使用一个for循环,但检查的“终结者”序列。

0

您可以关闭你正在阅读的InputStream,或者你可以返工您的代码以只读数据时,实际上存在任何数据阅读 - 当你不控制写作时,这可能几乎是不可能的。

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 2009-12-15 13:25:15

0

也许我误解的东西,但我想你想使用Observer模式。