我知道可以使用响应标头的content-length
字段来完成。但是当响应头不包含content-length
字段时会发生什么?我尝试二进制搜索文件中存在哪个最大字节。我使用此方法进行二进制搜索,以检查要下载的文件是否包含byteNo
字节 -
private boolean fileContainsByte(long byteNo) {
try {
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("User-Agent", "");
urlConnection.setRequestProperty("Range", "bytes=" + byteNo + "-");
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
int v = inputStream.read();
if (v == -1)
return false;
return true;
} catch (IOException ex) {
return false;
}
}
但二进制搜索以确定文件长度的结果非常慢。此外,对于某些下载文件,此方法不起作用(可能对于不支持下载文件的range
标题字段的服务器而言。)
我搜索了很多内容并没有找到解决此问题的方法。我已经注意到了例如这个Book。我甚至无法使用我的代码确定文件大小(尝试content-length
方法,如果失败则执行二进制搜索)。但是当我尝试使用wGet或IDM下载它们时,它们的总文件大小会在创建下载后的2秒内显示出来。他们是怎么做到的?