从输入流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读取时有没有办法超时? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Java基础知识十一:FileInputStream字节输入流读取文件复制读取字节数组复制图片案例,字节缓冲流介绍复制视频案例,字符串编码与解码