从输入流Java读取时有没有办法超时? [复制]

Posted

技术标签:

【中文标题】从输入流Java读取时有没有办法超时? [复制]【英文标题】:Is there a way to have a time out when reading from a input stream Java? [duplicate] 【发布时间】: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; 
  

【问题讨论】:

您能修正一下格式吗?只需选择程序文本并点击 按钮。 【参考方案1】:

Socket.setSoTimeout()HttpURLConnection.setReadTimeout()

【讨论】:

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

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

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

    使用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?

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

【讨论】:

嗨,谢谢。我用谷歌搜索了这个问题,如果对这些关键字有疑问,通常会显示堆栈溢出。

以上是关于从输入流Java读取时有没有办法超时? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在标准 C++ 中直接从键盘读取输入? [复制]

Java非阻塞读取[关闭]

Java基础知识十一:FileInputStream字节输入流读取文件复制读取字节数组复制图片案例,字节缓冲流介绍复制视频案例,字符串编码与解码

java - 如何超时读取Java Socket?

使用IO流复制文件

用java控制流实现文件复制后,不能删除文件