HttpURLConnection.getContentLength()为-1 解决方法
注意1
getContentLength()方法是是从请求体中获取数据,而GET是URL明文,API是这样说的:Returns the length, in bytes, of the request body and made available by the input stream, or -1 if the length is not known ir is greater than Integer.所有会一直返回回-1
conn.setRequestMethod("POST"); //把提交从GET改为POST
注意2
最近在做一个下载平台,用到多线程下载和断点续传功能,当我获取文件大小getContentLength()的时候,返回结果是-1。文件下载是没问题的,但是大小却不正常,用模拟器获取getContentLength()是正常的,但是真机却返回-1了,模拟器是低版本运行,于是我就猜想是版本问题,果然2.2版本以上HttpURLConnection跟服务交互采用了"gzip"压缩:参考api:By
default, this implementation of HttpURLConnection
requests
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: whenread()
returns
-1.
connection.setRequestProperty("Accept-Encoding", "identity");
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: linux查看服务器【有效】连接数
- 下一篇: 谷歌三大核心技术