【问题标题】:Is there a way to have a time out when reading from a input stream Java? [duplicate]从输入流Java读取时有没有办法超时? [复制]
【发布时间】:2011-12-11 08:49:44
【问题描述】:

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

我注意到当我试图读取更多信息然后发送到我的服务器时,网络浏览器会冻结。我看到我的套接字冻结了,因为 Web 浏览器返回的信息少于它试图读取的信息。有没有办法在 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; 
 } 

【问题讨论】:

  • 您能修正一下格式吗?只需选择程序文本并点击 {} 按钮。

标签: java tcp timeout inputstream


【解决方案1】:

Socket.setSoTimeout()HttpURLConnection.setReadTimeout()

【讨论】:

  • @downvoter 告诉。这两种方法都不存在吗?他们都没有设置超时?
【解决方案2】:

你有几个选择,但不是很漂亮。 “正常”的 Java 套接字 io 没有超时,流也没有

  1. 在单独的线程中读取数据并将输入数据排队 有你自己的超时机制

  2. 使用java非阻塞IO api

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

【讨论】:

  • 错了。 “普通”Java 套接字 I/O 有 Socket.setSoTimeout()HttpURLConnection.setReadTimeout()。未附加到套接字的流没有任何理由超时,除了可能来自控制台。
【解决方案3】:

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

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

【讨论】:

  • 嗨,谢谢。我用谷歌搜索了这个问题,如果对这些关键字有疑问,通常会显示堆栈溢出。
猜你喜欢
  • 2011-07-07
  • 1970-01-01
  • 2012-02-26
  • 2016-09-20
  • 2016-01-02
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多