2009-12-15 70 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模式。