OkHttp抛出异常java.net.ProtocolException: unexpected end of stream

今天用okHttp写了个从本地的Apache服务器上下载资源的安卓app,然后发现偶尔的下载会抛出java.net.ProtocolException: unexpected end of stream的异常,苦思不得结果后上百度查找,百度有很多分析,有可能的原因是响应头Content-length和实体长度不同,找到几个方法,有的说在请求头中添加Accept-Encoding,值为identity;有的说添加Connection,

.addHeader("Accept-Encoding", "identity")
.addHeader("Connection", "keep-alive")

但是没有用,还是会抛出这个异常,然后我以为是okHttp的问题,改用HttpURLConnection,发现还是会抛出类似的异常。

然后抛出这个异常后,我打印已下载文件内容的长度,发现只比响应头的Content-length少一字节。

然后实在找不到解决方法,我只能用最笨的方法,捕捉这个异常,启动一个新线程断点续传

最后我也没清楚为什么会这样,但是我后来嫌下载太慢,把输入流的缓冲区从1024改成8096

int len = 0;
byte[] b = new byte[8096];
while ((len = inputStream.read(b)) != -1) {
...
}

然后这个异常我就没见到过了,误打误撞程序就莫名其妙没问题了。

折腾了半天,不清楚原因,记录下来,希望有大佬可以解答我的疑惑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值