1.断点续传的介绍
客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载。从而达到让用户节省时间,提高速度的目的。
2.断点续传的环境要求
(1). 如果是基于http请求与响应实现的断点续传,需要服务器支持"响应一部分"数据的功能;(本案例采用的是tomcat7服务器,而tomcat7服务器是支持这个功能的)
(2). 在客户端需要使用RandomAccessFile类对文件任意位置的数据进行随机读写操作;
3.java的RandomAccessFile类介绍
java的API中对RandomAccessFile类的解释如下:
我对RandomAccessFile类的理解是:RandomAccessFile类是java提供的一个可以用于随机读写文件内容的类,我们可以对RandomAccessFile类关联的文件中的任意位置和任意大小的数据进行任意的读写操作;因此要想完成文件的断点续传操作,该类的使用是必不可少的!
4.断点续传的基本实现思路
5.断点续传的代码实现
基础环境搭建:
(1). 创建WEB的maven工程;
(2). 引入maven的tomcat7插件;
(3). 在webapp目录下存放多个文件,以备测试断点续传下载使用;
java客户端代码实现:
public class MyDownLoadClient {
public static String urlpath = "http://127.0.0.1:80/";
private static int threadCount = 5;
public static void main(String[] args) throws Exception {
// 让用户输入要下载的文件名称
Scanner sc = new Scanner(System.in);
System.out.println("请输入要下载的文件名称:");
String file = sc.next();
urlpath = urlpath.concat(file);
// 获取文件总大小
URL url = new URL(urlpath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(2000);
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
int contentLength = conn.getContentLength();
System.out.println("length" + contentLength);
int part = contentLength / threadCount;
// 读配置文件
ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
CountDownLatch count;
InputStream in = MyDownLoadClient.class.getClassLoader().getResourceAsStream(file + ".properties");
if (in != null) {