java 问题:InputStream read网络文件(下载文件)的时候,因为外网突然断开(内网正常,路由器断网了)导致read一直处于阻塞状态,应该怎么关闭这个数据流?
因发现下载线程出现以下错误:(猜测是因为read阻塞的问题)
"Dowloading" prio=10 tid=0x001562c0 nid=0x527 runnable [0x4e9fe000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:146)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:139)
at org.apache.http.impl.io.SessionInputBufferImpl.read(SessionInputBufferImpl.java:200)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:178)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137)
at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:150)
at com.ufttt.controller.handler.j.a.a(Transferresume.java:130)
at com.ufttt.controller.h.j$1.run(UpgradeHandler.java:37)
at java.lang.Thread.run(Thread.java:701)
Locked ownable synchronizers:
- None
请问怎么设置,用什么类,InputStream 并没有设置timeout的方法
追答socket.setSoTimeout();
追问能具体点吗,现在只有inputStream input,
HttpEntity entity = response.getEntity();
input = entity.getContent();
怎么和socket关联?
你用httpclient啊,可以直接设置soTimeout的。把你创建httpclient对象的代码贴下
追问HttpClient httpclient = HttpClients.createDefault();
HttpGet httpget = new HttpGet(url.trim());
response = httpclient.execute(httpget);
你用的是新版的啊,
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(RequestConfig.custom()
.setConnectionRequestTimeout(30 * 1000).setSocketTimeout(20 * 1000).setRedirectsEnabled(true)
.setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY)
.build())
.build();本回答被提问者采纳