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