可能重复:
是否可以在超时的情况下读取Java InputStream?
我注意到,当我试图读取更多信息,然后发送到我的服务器时,网络浏览器会冻结。我看到我的套接字冻结了,因为网络浏览器返回的信息比它试图读取的信息少。有没有一种方法可以在Curry上设置超时时间?我正在使用输入流
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;
}
Socket.setSoTimeout()
或HttpURLConnection.setReadTimeout()
。
这里讨论过:是否可以在超时的情况下从InputStream中读取?
据我所见,解决方案已经提供。
您有几个选择,但并不美观。"正常"的java套接字io没有超时,流也没有
-
在一个单独的线程中进行读取,并将输入数据排队使用您自己的的超时机制
-
使用java非阻塞IO api
http://download.oracle.com/javase/1.4.2/docs/guide/nio/