DataInputStream in;
byte[] b = new byte[1024];
for (;;){
in.read(b);
//do something
}
我有上面的代碼。在另一個線程中,我正在處理一些其他事件。在這個線程中,我想取消上面代碼中顯示的讀取操作。我能怎麼做?取消讀取操作
DataInputStream in;
byte[] b = new byte[1024];
for (;;){
in.read(b);
//do something
}
我有上面的代碼。在另一個線程中,我正在處理一些其他事件。在這個線程中,我想取消上面代碼中顯示的讀取操作。我能怎麼做?取消讀取操作
如果你從另一個線程發送一些數據
final byte[] TERMINATOR = ...;
in.Write(TERMINATOR)
讀線程可以在這種情況下,不應該使用一個for循環,但檢查的「終結者」序列。
您需要使用java.nio包,看看這裏http://rox-xmlrpc.sourceforge.net/niotut/
您可以關閉你正在閱讀的InputStream
,或者你可以返工您的代碼以只讀數據時,實際上存在任何數據閱讀 - 當你不控制寫作時,這可能幾乎是不可能的。
您需要使用java.nio
才能從您的信息流中讀取,此時您可以從另一個線索呼叫thread.interrupt()
以中斷任何正在進行的read
。
,如果你願意,你可以重新輸入流:
DataInputStream in;
byte[] b = new byte[1024];
in.mark(b.length());
try {
for (;;){
in.read(b);
//do something
}
}
catch (InterruptedException e) {
in.reset();
}
也許我誤解的東西,但我想你想使用Observer模式。
我認爲你錯過了一點 - 真正的問題是如何引發'InterruptedException',即使這樣它可能不會中斷在操作系統中被阻止的read() 。 – Alnitak 2009-12-15 13:25:15