Android2.2以上版本下载网络文件getContentLength()大小异常
2014-09-25 21:54
615 查看
接手一个项目出现一个问题2.2以上的版本下载网络资源不完整无法更新。check代码后发现通过HttpURLConnection.getContentLength()获取的size跟下载下来的file的legth不等。奇怪的是下载3个文件前2个都pass最后一个下载的文件的长度比 HttpURLConnection.getContentLength()获取的size小。自己搭建了个tomcat服务器就正常了。为什么.net服务器就不行。这么诡异的问题恐怕只能请apache组织来解决了。
不过经过小弟对 HttpURLConnection的源码的挖掘,发现了HttpURLConnection跟服务交互采用了"gzip"压缩。所以下载的fileLegth
> HttpURLConnection.getContentLength().参考api:
By
default, this implementation of
that servers use gzip compression. Since
the number of bytes transmitted, you cannot use that method to predict how many bytes can be read from
Instead, read that stream until it is exhausted: when
-1.
api上也不推荐是用该方法来验证文件的完整性。可目前项目有不能修改服务器。通过继续研究api发现这种gzip压缩方式是可以取消的。取消办法这http request的head中设置如下参数即可:
urlConnection.setRequestProperty("Accept-Encoding", "identity");
至此基本上面诡异的问题修复。2.2以上的版本默认都是采用压缩优化希望大家注意。关于文件的完整性验证希望大家还是走md5吧。
不过经过小弟对 HttpURLConnection的源码的挖掘,发现了HttpURLConnection跟服务交互采用了"gzip"压缩。所以下载的fileLegth
> HttpURLConnection.getContentLength().参考api:
By
default, this implementation of
HttpURLConnectionrequests
that servers use gzip compression. Since
getContentLength()returns
the number of bytes transmitted, you cannot use that method to predict how many bytes can be read from
getInputStream().
Instead, read that stream until it is exhausted: when
read()returns
-1.
api上也不推荐是用该方法来验证文件的完整性。可目前项目有不能修改服务器。通过继续研究api发现这种gzip压缩方式是可以取消的。取消办法这http request的head中设置如下参数即可:
urlConnection.setRequestProperty("Accept-Encoding", "identity");
至此基本上面诡异的问题修复。2.2以上的版本默认都是采用压缩优化希望大家注意。关于文件的完整性验证希望大家还是走md5吧。
相关文章推荐
- Android2.2以上版本下载网络文件getContentLength()大小异常
- Android2.2以上版本下载网络文件getContentLength()大小异常
- Android2.2以上版本下载网络文件getContentLength()大小异常
- Android2.2以上的版本HttpURLConnection.getContentLength()获取的size跟下载下来的file的legth不相等
- 下载网络文件HttpURLConnection.getContentLength()大小为 -1
- 下载网络文件HttpURLConnection.getContentLength()大小为 0
- 下载网络文件HttpURLConnection.getContentLength()大小为 -...
- 下载网络文件HttpURLConnection.getContentLength()大小为
- 下载网络文件HttpURLConnection.getContentLength()大小为 -1
- 下载网络文件HttpURLConnection.getContentLength()大小为 -1
- 下载网络文件HttpURLConnection.getContentLength()大小为 0
- (4.3.2.14)下载网络文件HttpURLConnection.getContentLength()大小为 -1
- 关于android上下载网络文件大小异常的问题
- 遇到问题---java获取网络文件大小失败getContentLength()为-1 完整解决方法
- 关于inputStream.available()与HttpURLConnection.getContentLength()方法获取下载文件的大小
- 关于inputStream.available()与HttpURLConnection.getContentLength()方法获取下载文件的大小
- 遇到问题---java获取网络文件大小失败getContentLength()为-1 完整解决方法
- 2 关于android上下载网络文件大小异常的问题
- android文件下载大小和网络不一致(偏大)
- android文件下载大小和网络不一致(偏大)