断点续传——android的文件下载

在一些App上我们经常会下载一些文件,而这些文件下载时如果出现故障了,这时就会有一个续传功能,在原有的文件下载上,接着下载文件,而不是将文件重新下载,这就是断点续传功能。
下面,我们就来讲一下断点续传的功能如何实现
首先,断点续传也是文件下载,但是我们需要获取当前下载文件的总长度

//在开始时,设立三个变量,分别时start,end,max
//第一次获取需要下载文件的总大小,并通过handler发送给Activity,更新UI
try {
    URL url = new URL(uri);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    max = connection.getContentLength();
    Message obtain = Message.obtain();
    obtain.what = FileNetModel.PROGRESSBAR_BREAKPOINTMAX;
    obtain.obj = max;
    handler.sendMessage(obtain);
} catch (Exception e) {
    e.printStackTrace();
}

在第一次网络访问时,我们只获取他们的文件总长度
之后呢,我们做一个判断,判断是否文件下载过

File file = new File(path);
if (file.exists()){
    start = (int) file.length();
}
end = max;

然后进行第二次网络访问

URL url1 = new URL(uri);
HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
connection.setRequestProperty("Range","bytes="+start+"-"+end+"");//设置请求头,格式固定

之后使用随机访问流进行文件读取

if (connection.getResponseCode()==206){
    InputStream inputStream = connection.getInputStream();
    RandomAccessFile randomAccessFile = new RandomAccessFile(path, "rw");//使用随机访问流
    randomAccessFile.seek(start);
    byte[] bytes = new byte[1024];
    int len = 0;
    int progress = start;
    while ((len = inputStream.read(bytes))!=-1){
         randomAccessFile.write(bytes,0,len);//随机访问六写入文件
    }

如此,便可实现断点续传,就算在下载过程中有网络故障的问题,也不会让用户重新下载,极大的优化了用户体验。
感谢观看

你可能感兴趣的:(断点续传——android的文件下载)