DataInputStream .read(byte[]) 阻塞方法怎么设置超时?如果我从流中读去数据,但是数据一直没有,但SOCKET一直是通的,导致程序一直阻塞在这里。我该怎么办

解决方案 »

  1.   

    如果这个方法返回个-1,就说明没数据了,就不执行呢。加个条件就行。
    int i=DataInputStream object.read(byte[]);
    while(i==-1){
    return ;
    }
      

  2.   

    关键int i=DataInputStream object.read(byte[]); 
    它一直阻塞在这里,就根本没有向下执行呢
      

  3.   

    我想到一个办法,就是对socket进行超时
    public void setSoTimeout(int timeout)
                      throws SocketException启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。将此选项设为非零的超时值时,在与此 Socket 关联的 InputStream 上调用 read() 将只阻塞此时间长度。如果超过超时值,将引发 java.net.SocketTimeoutException,虽然 Socket 仍旧有效。选项必须在进入阻塞操作前被启用才能生效。超时值必须是 > 0 的数。超时值为 0 被解释为无穷大超时值。 
      

  4.   

    如果这个方法返回个-1,就说明没数据了,就不执行呢。加个条件就行。 
    int i=DataInputStream object.read(byte[]); 
    while(i==-1){ 
    return ; 
    }