BufferedReader的readLine方法不支持超时,如何为其包一个可以支持超时的壳子?
BufferedReader是Java的自带类,是不能修改的

解决方案 »

  1.   

    不明白“readLine方法不支持超时”的意思。
      

  2.   

    如果没有数据来,readLine会一直等待,这就是不支持超时
      

  3.   

    给你一个方法,参考一下long maxwaittime = 20000//设定一个最大等待时间,比如20秒
    boolean b = true;//超时标志位
    long l1 = System.currentTimeMillis();//取系统当前时间//去读文件,br对象是你之前实例化的BufferdReader
    String s = null;
    while((s = br.readLine()) !=null && b){
    long l2 = System.currentTimeMillis();
    if(l2-l1<maxwaittime){
    //此次操作在设定的最大等待时间之内
    //在此你要做的事,比如写文件,bw.write(s+"\r\n");
    }
    else{
    //超时处理
    b = false;
    JOptionPane.showMessageDialog(null,"读文件超时!","系统提示",JOptionPane.WARNING_MESSAGE);
    }
    }
    这样,看看能不能完成你要的功能
      

  4.   

    实现子类,覆盖readLine方法的实现
      

  5.   

    ls的办法或许能解决,不过它原本不支持超时是有道理的。不知道lz为什么需要超时的支持?如果是读文件,不会超时。如果读socket流,ReadLine会因为末尾没有\n而一直等待,但是程序也不应该这么读。主要想看Lz用在什么场景下