从输入流Java读取时有没有办法超时?

时间:2011-10-19 22:55:14

标签: java tcp timeout inputstream

  

可能重复:
  Is it possible to read from a Java InputStream with a timeout?

我注意到当我尝试阅读更多信息然后被发送到我的服务器时,网络浏览器会冻结。我看到我的套接字冻结,因为网络浏览器返回的信息较少,然后它正在尝试阅读。有没有办法在Currtly上设定时间我正在使用输入流

public String ReadLine()
 {
    String out;
    out="";
     // read in one line
     try{
         request = new StringBuffer(1000);
        boolean f=true;
        while(true)
        {
            int c=in.read();
            if (c=='\r') 
                {
                // next should be a \n
  // Program freezed hear
                 c=in.read();
                if (f==true)
                    return "";
                 break;
                }
            f=false;
            out=out+(char)c;

            request.append((char)c);
                } // end while

     } catch(IOException ec)
        {
            System.out.println(ec.getMessage());    
        }

        System.out.println(request);


    return out; 
 } 

3 个答案:

答案 0 :(得分:5)

Socket.setSoTimeout()HttpURLConnection.setReadTimeout()

答案 1 :(得分:1)

这里讨论过:Is it possible to read from a InputStream with a timeout?

据我所知,提供了解决方案。

答案 2 :(得分:-1)

你有几个选择,但它并不漂亮。 '普通'java套接字io没有超时也没有流

  1. 在单独的线程中进行读取并排队输入数据 使用您自己的超时机制

  2. 使用java非阻塞IO api

    http://download.oracle.com/javase/1.4.2/docs/guide/nio/