有 Java 编程相关的问题?

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

超时Java readByte()会阻止应用程序

如果客户端突然断开连接并引发EOF异常,则以下循环似乎会阻止整个服务器应用程序:

String a = "";
int amount = 1;
while(((cr = streamIn.readByte()) != EOF))
{
 if(amount < 100)
 {
  a+=(char)cr;
  amount++;
 }
 else
  break;
}

根据功能描述: readByte():接收一个字节。该方法将阻塞,直到数据可用

问题是,如何让它超时,最多只阻塞几秒钟


共 (3) 个答案

  1. # 1 楼答案

    那是什么服务器?我的意思是它会阻止为客户服务的线程突然下降。。。它仍然应该为其他客户服务

  2. # 2 楼答案

    研究使用inputStream。available(),返回无需阻塞即可检索的字节数

    (未经测试)示例:

    String a = "";
    int amount = 1;
    int available = 0;
    while(true){
        int available = streamIn.available();
        if(available <= 0){
            continue;
        }   
        byte cr = streamIn.readByte();
        if(cr == EOF){
            break;
        }
        if(amount < 100){
            a+=(char)cr;
            amount++;
        }else{
            break;
        }
    }