Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取中的Java HttpURLConnection响应处理阻塞_Java_Httpurlconnection - Fatal编程技术网

读取中的Java HttpURLConnection响应处理阻塞

读取中的Java HttpURLConnection响应处理阻塞,java,httpurlconnection,Java,Httpurlconnection,通过GETrequestHttpURLConnection向服务器发送请求,我得到了答案,有时是GZIP,有时不是 导入java.io.BufferedReader; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.InputStreamReader; 导入java.net.HttpURLConnection; 导入java.net.MalformedURLException; 导入java.net.ProtocolExceptio

通过
GET
request
HttpURLConnection
向服务器发送请求,我得到了答案,有时是
GZIP
,有时不是

导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.MalformedURLException;
导入java.net.ProtocolException;
导入java.net.URL;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入java.util.zip.gzip输入流;
公共类GetResponse{
私有字符串getResponseFromGetRequest(){
字符串请求字符串=”https://www";
URL obj=null;
试一试{
obj=新URL(请求字符串);
}捕获(格式错误){
log.log(Level.WARNING,“URL obj-”,e);
返回“”;
}
HttpURLConnection con=null;
试一试{
con=(HttpURLConnection)obj.openConnection();
}捕获(IOE异常){
log.log(Level.WARNING,“打开连接-”,e);
返回“”;
}
试一试{
con.setRequestMethod(“GET”);
}捕获(协议例外e){
log.log(Level.WARNING,“设置请求方法GET-”,e);
返回“”;
}
con.setRequestProperty(“接受”,“*/*”);
字符串contentEncoding=con.getContentEncoding();
InputStream InputStream=null;
if(contentEncoding!=null&contentEncoding.equals(“gzip”)){
试一试{
inputStream=新的GZIPInputStream(con.getInputStream());
}捕获(IOE异常){
log.log(Level.WARNING,“错误连接-”,e);
返回“”;
}
}否则{
试一试{
inputStream=con.getInputStream();
}捕获(IOE异常){
log.log(Level.WARNING,“错误连接-”,e);
返回“”;
}
}
BufferedReader in=新的BufferedReader(新的InputStreamReader(inputStream));
字符串输入线;
StringBuffer响应=新的StringBuffer();
试一试{
而((inputLine=in.readLine())!=null&in.ready()){
追加(inputLine);
}
}捕获(IOE异常){
e、 printStackTrace();
log.log(Level.WARNING,“InputLine-”,e);
返回“”;
}
试一试{
in.close();
}捕获(IOE异常){
log.log(Level.WARNING,“未关闭BufferedReader-”,e);
返回“”;
}
返回response.toString();
}
}
一旦有100-200个请求挂起整个程序,就不会发生任何事情,也不会出现任何错误

看起来很可怕,它显示:

“pool-55-thread-3”#630 prio=5 os_prio=0 tid=0x00007f8dc4017000 nid=0x4db3 runnable[0x00007f8d53cfa000]java.lang.thread.State:java.net.SocketInputStream.socketRead0(本机方法)java.net.SocketInputStream.socketRead(SocketInputStream.java:116)java.net.SocketInputStream.read(SocketInputStream.java:170)的java.net.SocketInputStream在sun.security.ssl.SSLSocketImpl.java:973的sun.security.ssl.InputRecord.readFully(InputRecord.java:465)的sun.security.ssl.InputRecord.read(InputRecord.java:503)的sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)的java.lang.Object)中,sun.security.ssl.ssl.SSLSocketImpl.performInitialHandshake中锁定了(一个java.lang.Object)(SSLSocketImpl.java:1375)-在sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)的sun.security.SSLSocketImpl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)的sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)上锁定(一个java.lang.Object)在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)在sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1512)在sun.net.www.protocol.https.DelegateHttpsURLConnection.getInputStream上锁定(sun.net.www.protocol.https.https.DelegateHttpsURLConnection)(HttpURLConnection.java:1440)-在sun.net.www.protocol.http.HttpURLConnection.getHeaderField(HttpURLConnection.java:2942)在sun.net.URLConnection.getContentEncoding(URLConnection.java:523)在sun.net.www.protocol.https.httpsurlconnection impl.getContentEncoding上锁定(sun.net.www.protocol.https.HttpURLConnection.java:523)(HttpsURLConnectionImpl.java:410)在GetResponse.getResponseFromGetRequest(GetResponse.java:68)在ThreadsMarathon.call(ThreadsMarathon.java:17)在ThreadsMarathon.call(ThreadsMarathon.java:7)在java.util.concurrent.FutureTask.run(FutureTask.java:266)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)在java.lang.Thread.run(Thread.java:745)中的java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

有时代码行中出现第68行,有时出现第91行:

String contentEncoding=con.getContentEncoding();
while((inputLine=in.readLine()!=null)){

搜索解决方案发现的信息表明崩溃是由于
readLine()
,因为在某些情况下,服务器可能不发送符号的结尾。请在.ready()中添加条件
。无论如何,问题已经解决

关于崩溃发生在
String contentEncoding=con.getContentEncoding();
行上的原因,我永远都不知道,因为如果
con=(HttpURLConnection)obj.openConnection();
出现问题,就会跳出一条消息


我会做错什么吗?我如何避免冻结?如何识别此响应中的悬停?跳过它?是否可能安装某种超时,如果此方法执行时间超过一秒-跳过它?

测试没有任何意义