有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java取消读取操作

DataInputStream in;

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

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


共 (6) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    也许我误解了什么,但我想你们应该使用观察者模式

  3. # 4 楼答案

    您可以关闭正在读取的InputStream,也可以重新编写代码,使其仅在实际有数据要读取时读取数据,如果您不控制写入端,这几乎是不可能的

  4. # 5 楼答案

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

    DataInputStream in;
    
    byte[] b = new byte[1024];
    in.mark(b.length());
    try {
    for (;;){
     in.read(b);
     //do something
    }
    }
    catch (InterruptedException e) {
    in.reset();
    }
    
  5. # 6 楼答案

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

    final byte[] TERMINATOR = ...;
    in.Write(TERMINATOR)
    

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