java InputStream read网络文件的时候,因为外网突然断开导致read一直处于阻塞状态,应该怎么close流?

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

第1个回答  2015-09-01
设置读取超时,超过特定的时候后就抛出异常了追问

请问怎么设置,用什么类,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();

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网