取消读取操作

时间:2009-12-15 12:53:23

标签: java sockets

DataInputStream in;

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

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

6 个答案:

答案 0 :(得分:1)

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

,该怎么办?
final byte[] TERMINATOR = ...;
in.Write(TERMINATOR)

在这种情况下,读取线程不应该使用for循环,而是检查'terminator'序列。

答案 1 :(得分:1)

您需要使用java.nio从您的信息流中读取,此时您可以从另一个线程调用thread.interrupt()来中断任何正在进行的read

答案 2 :(得分:0)

您需要使用java.nio包,请查看此处http://rox-xmlrpc.sourceforge.net/niotut/

答案 3 :(得分:0)

你可以关闭你正在阅读的InputStream,或者你可以重新编写你的代码,只有当有任何数据需要读取时才读取数据 - 当你不控制写作时这几乎是不可能的侧。

答案 4 :(得分:0)

如果您愿意,可以重置输入流:

DataInputStream in;

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

答案 5 :(得分:0)

也许我误解了一些东西,但我认为你想要使用Observer模式。