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();
}