下载文件的时候,一个大文件切成很多片,用多线程下载,速度会快很多
阅读代码的时候注意查看代码里面的注释
想用多线程下载文件,则,
第一:得了解 RandomAccessFile 类,这是个随机访问文件类,里面可以设置 访问的 开始地址和结束地址,且该类可读可写。
RandomAccessFile out = new RandomAccessFile(file, "rw"); 则表示,该类可读可写。通过 out.seek(start) 可以定位开始读取的位置。
第二:既然是网络文件下载,那就必须得了解 URL 类,该类是 java.net 包提供的一个 可以用来网络连接的类。
URL url = new URL(urlLocation); 可以这样实例化该类,然后打开连接,HttpURLConnection conn = (HttpURLConnection) url.openConnection();,还可以设置些别的参数,比如说设置超时,设置访问方法,设置 访问 起始点之类的。
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Range", "bytes=" + start +"-"+end );
第三:了解线程,这里我们使用 java 1.5之后引入的 concurrent 包里面的 Executors.newCachedThreadPool() 线程池
第四:最基本的 io读写得知道
看看代码吧。
1.为了方便,我写了个工具类,用于提供 Util类用来提供获取 HttpURLConnection 连接
public class Util {
// 记录读取了多少,一共读取了多少
public static long start;
// 记录文件总大小
public static long sum;
/**
*
* @Title: g