zoukankan      html  css  js  c++  java
  • Java实现多线程下载

      1 package cn.test.DownLoad;
      2 
      3 import java.io.File;
      4 import java.io.InputStream;
      5 import java.io.RandomAccessFile;
      6 import java.net.HttpURLConnection;
      7 import java.net.URL;
      8 
      9 public class MultiPart {
     10     public void down() throws Exception
     11     {
     12         //1、声明URL
     13         String fileName="a.rar";
     14         String path="http://localhost:8080/day23_MultiThreadDownLoad/file/"+fileName;
     15         URL url=new URL(path);
     16         //2、返回连接对象
     17         HttpURLConnection conn=(HttpURLConnection) url.openConnection();
     18         //3、设置请求类型
     19         conn.setRequestMethod("GET");
     20         //4、设置允许接收消息
     21         conn.setDoInput(true);
     22         //5、连接
     23         conn.connect();
     24         //6、状态码
     25         int code=conn.getResponseCode();
     26         if(code==200)
     27         {
     28             int sum=conn.getContentLength();//总长度
     29             String downFile="d:\"+fileName;
     30             //7、创建一个相同大小的空文件
     31             RandomAccessFile file=new RandomAccessFile(new File(downFile), "rw");
     32             file.setLength(sum);
     33             file.close();
     34             //8、声明线程数量
     35             int threadCount=3;
     36             //9、声明每个线程的下载量
     37             int threadSize=sum/threadCount+((sum%threadCount==0)?0:1);
     38             for(int i=0;i<threadCount;i++)
     39             {
     40                 int start=i*threadSize;
     41                 int end=start+threadSize-1;
     42                 System.out.println("线程: "+i+" : "+start+" : "+end);
     43                 //10、启动线程
     44                 new myThread(start,end,downFile,url).start();
     45             }        
     46         }
     47         //11、关闭连接
     48         conn.disconnect();
     49     }
     50     
     51     public static void main(String[] args) {
     52         try {
     53             new MultiPart().down();
     54         } catch (Exception e) {
     55             e.printStackTrace();
     56         }
     57         System.out.println("OK");
     58     }
     59 }
     60 
     61 class myThread extends Thread
     62 {
     63     private int start;
     64     private int end;
     65     private String downFile;
     66     private URL url;    
     67     public myThread(int start, int end, String downFile, URL url) {
     68         this.start = start;
     69         this.end = end;
     70         this.downFile = downFile;
     71         this.url = url;
     72     }
     73 
     74     public void run() {
     75         try {
     76             HttpURLConnection conn=(HttpURLConnection) url.openConnection();
     77             conn.setRequestMethod("GET");
     78             conn.setDoInput(true);
     79             //设置从哪里下载。断点
     80             conn.setRequestProperty("range", "bytes="+start+"-"+end);
     81             conn.connect();
     82             int code=conn.getResponseCode();
     83             if(code==206)
     84             {
     85                 int size=conn.getContentLength();
     86                 InputStream in=conn.getInputStream();
     87                 //写同一文件
     88                 RandomAccessFile file=new RandomAccessFile(new File(downFile), "rw");
     89                 //设置从文件的哪里开始写
     90                 file.seek(start);
     91                 byte[] b=new byte[1024];
     92                 int len=-1;
     93                 while((len=in.read(b))!=-1)
     94                 {
     95                     file.write(b, 0, len);
     96                 }
     97                 file.close();
     98             }
     99             conn.disconnect();            
    100             
    101         } catch (Exception e) {
    102             e.printStackTrace();
    103         }        
    104     }    
    105 }
  • 相关阅读:
    跨平台技术
    Unity和虚幻的比较
    商业模式(四):群硕软件,欧美客户为主的软件外包
    商业模式(四):群硕软件,欧美客户为主的软件外包
    Volley完全解析
    双十一京东图书购物清单,动动脑子节省300元
    双十一京东图书购物清单,动动脑子节省300元
    ListView异步加载图片,完美实现图文混排
    使用DrawerLayout实现QQ5.0侧拉菜单效果
    商业模式(三):P2P网贷平台,毛利润测算
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4158274.html
Copyright © 2011-2022 走看看