DataInputStream in;
byte[] b = new byte[1024];
for (;;){
in.read(b);
//do something
}
我有上面的代码。在另一个线程中,我正在处理其他一些事件。在这个线程中,我想取消上面代码中显示的读取操作。我该怎么办?
答案 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模式。