多线程和端点续传

2016-05-27  本文已影响0人  Declan_xu

HttpClient

发送get请求

发送post请求

  //创建一个客户端对象
  HttpClient client = new DefaultHttpClient();
  //创建一个post请求对象
  HttpPost hp = new HttpPost(path);

异步HttpClient框架

发送get请求

  //创建异步的httpclient对象
  AsyncHttpClient ahc = new AsyncHttpClient();
  //发送get请求
  ahc.get(path, new MyHandler());

发送post请求


多线程下载

原理:服务器CPU分配给每条线程的时间片相同,服务器带宽平均分配给每条线程,所以客户端开启的线程越多,就能抢占到更多的服务器资源

确定每条线程下载多少数据

计算每条线程下载数据的开始位置和结束位置(掌握)

  for(int id = 1; id <= 3; id++){

  //计算每个线程下载数据的开始位置和结束位置

  int startIndex = (id - 1) * blockSize;

  int endIndex = id * blockSize - 1;

  if(id == THREAD_COUNT){

  endIndex = length;

  }

  //开启线程,按照计算出来的开始结束位置开始下载数据

  new DownLoadThread(startIndex, endIndex, id).start();

  }

再次发送请求至下载地址,请求开始位置至结束位置的数据

  String path = "http://192.168.1.102:8080/editplus.exe";

  URL url = new URL(path);

  HttpURLConnection conn = (HttpURLConnection) url.openConnection();

  conn.setReadTimeout(5000);

  conn.setConnectTimeout(5000);

  conn.setRequestMethod("GET");

  //向服务器请求部分数据

  conn.setRequestProperty("Range", "bytes=" + startIndex + "-" + endIndex);

  conn.connect();

带断点续传的多线程下载


上一篇 下一篇

猜你喜欢

热点阅读