Android初心者の道-マルチスレッドのダウンロード


Androidクライアントのダウンロード手順
  • は、Androidクライアントで最初に空のファイル(空白のファイル)を作成し、サイズはサーバと同じです.
  • はいくつかのスレッドを開いて、それぞれサーバ上の対応するリソースをダウンロードします.
  • すべてのスレッドがダウンロードされたら、サーバーのリソースがダウンロードされます.
  • Androidクライアントのダウンロードロジック
  • は、サーバ端のリソースファイルのサイズ
  • を取得する.
  • は、ローカルにサーバと同じサイズの空きファイル
    String path = "http://localhost:8080/ff.exe";
    
    URL url = new URL(path);
    
    //     
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    
    //   
    connection.setRequestMethod("GET");
    connection.setConnectTimeout(5000);
    
    //    
    int responseCode = connection.getResponseCode();
    
    if (responseCode == 200) {
    
        //             
        long contentLength = connection.getContentLength();
        System.out.println("       :"+contentLength);
    }
    
    //     
    connection.disconnect();
    
  • を作成する.
  • オープンスレッドの数に応じて、サーバリソースなどをいくつかのグループに分けます.
    File file = new File("temp.ext");
    RandomAccessFile raf= new RandomAccessFile(file, "rw");
    raf.setLength(contentLength);
    
  • スレッドタイプ
           10 byte。(  :length)
      3   (    :threadCount)。
     int blockSize = length / threadCount;
      1   3 byte    1-3     0 * blockSize + 1 ~ 1 * blockSize
      2   3 byte    4-6     1 * blockSize + 1 ~ 2 * blockSize 
      3   4 byte    7-10    2 * blockSize + 1 ~ 3 * blockSize(length)
    
    //         ,          
    long threadCount = 3;
    long blockSize = contentLength / threadCount;
    
    for (int i = 1; i <= threadCount; i++) {
        //       、    
        long startIndex = (i - 1) * blockSize + 0;//       0  
        long endIndex = i * blockSize - 1; //
        //       
        if (i == threadCount) {
            endIndex = contentLength - 1;
        }
        System.out.println("    :" + i + ",     :(" + startIndex + "~"
                + endIndex + ")");
        new DownloadThread(i, startIndex, endIndex, path).start();
    }
    
  • を作成します.