編輯:關於android開發
package com.zzw.constant;
public class Contant
{
public static int threadCount = 3;
}
1 package com.zzw.download;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.InputStreamReader;
10 import java.io.RandomAccessFile;
11 import java.net.HttpURLConnection;
12 import java.net.MalformedURLException;
13 import java.net.URL;
14 import java.net.URLConnection;
15
16 import javax.tools.FileObject;
17
18 import com.zzw.constant.Contant;
19
20 public class TestDownload
21 {
22 //public static int threadCount = 3;
23 public static int blockSize = 0;
24
25 public static void main(String[] args) throws Exception
26 {
27 URL url = new URL("http://localhost:8080/download/cc.zip");
28
29 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
30 conn.setRequestMethod("GET");
31 conn.setReadTimeout(10000);
32
33 long length = conn.getContentLength();
34
35 conn.connect(); //連接
36 File file = new File("cc.zip");
37
38 RandomAccessFile randomFile = new RandomAccessFile(file,"rwd");
39 randomFile.setLength(length);
40
41 //每一個線程他需要下載的大小
42 System.out.println("總大小:" + length);
43 blockSize = (int) (length / Contant.threadCount);
44 System.out.println("每一個線程下載的大小:" + blockSize);
45 long start = 1;
46 long end = 0;
47 for(int i=1; i < (Contant.threadCount+1); i++)
48 {
49
50 //1 >> 0 - 46354938 123456
51 //2 >> 46354939 -(46354939 + 46354938)
52 //3 >>
53 start = blockSize * (i -1);
54 end = blockSize*i -1;
55 if(i == Contant.threadCount)
56 {
57 end = length;
58 }
59 System.out.println("第" + i + "個線程下載的區間:" + start + " - " + end);
60 new downloadThread(file, i, start, end).start();
61 }
62
63 conn.disconnect();
64 }
65 }
66
67 class downloadThread extends Thread
68 {
69 private File path; //本地磁盤的地址
70 private String url = "http://localhost:8080/download/cc.zip" ; //HTTP請求的地址
71 private Integer threadID; //當前是第幾個線程
72 private long start; //該線程下載的起始位置
73 private long end; //該線程的結束位置
74
75 public downloadThread(File path, Integer threadID, long start,
76 long end) {
77 this.path = path;
78 this.threadID = threadID;
79 this.start = start;
80 this.end = end;
81
82 }
83
84 @Override
85 public void run()
86 {
87 try {
88 System.out.println(threadID + "開啟讀取");
89 File contextFile = new File(threadID +".txt");
90 if(!contextFile.exists())
91 {
92 contextFile.createNewFile();
93 }
94
95 //讀取斷線信息裡面的數據來重新的指定從哪裡開始寫
96 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(contextFile)));
97 String info = reader.readLine();
98 if(null != info && info.length() > 0)
99 {
100 start = start + Integer.parseInt(info);
101 }
102
103 System.out.println("start........=" + start);
104 URL uri = new URL(url);
105 HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
106 conn.setRequestProperty("Range", "bytes="+start +"-" + end);
107 conn.setReadTimeout(50000);
108 conn.setConnectTimeout(50000);
109
110 conn.connect();
111
112 //讓http請求只請求一個片段
113 System.out.println("bytes="+start +"-" + end);
114
115 //判斷一下是否為200?
116 int status = conn.getResponseCode();
117
118 if(status / 100 == 2)
119 {
120 int total = 0; //總共下載的字節數
121 //FileOutputStream out = new FileOutputStream(new File(threadID +".txt")); 不靠譜了
122 RandomAccessFile random = new RandomAccessFile(path, "rw");
123
124 random.seek(start);
125 InputStream in = conn.getInputStream();
126 byte[] buffer = new byte[1024];
127 int len = 0;
128
129 while((len = in.read(buffer)) != -1)
130 {
131 RandomAccessFile duandian = new RandomAccessFile(contextFile, "rwd");
132 random.write(buffer, 0, len);
133 total += len;
134 duandian.write(String.valueOf(total).getBytes());
135 duandian.close();
136 }
137 in.close();
138 random.close();
139 }
140 conn.disconnect();
141 System.out.println(threadID + "讀取完成");
142 } catch (MalformedURLException e) {
143 e.printStackTrace();
144 } catch (IOException e) {
145 e.printStackTrace();
146 }finally
147 {
148 synchronized (TestDownload.class)
149 {
150 Contant.threadCount --;
151 System.out.println("Contant.threadCount = " + Contant.threadCount);
152 if(Contant.threadCount == 0)
153 {
154 for(int i=1; i < 4; i++)
155 {
156 File contextFile = new File(i +".txt");
157 System.out.println(contextFile.delete() +" ccc");
158 }
159 }
160 }
161 }
162
163 }
164 }
手機安全衛士——高級工具-電話歸屬地查詢,安全衛士歸屬地查詢
手機安全衛士——高級工具-電話歸屬地查詢,安全衛士歸屬地查詢AToolsActivity.java //高級工具 public class AtoolsActivity
Android 6.0 Permission權限與安全機制,androidpermission
Android 6.0 Permission權限與安全機制,androidpermissionMarshmallow版本權限修改 android的權限系統一直是首要的
單機搭建Android開發環境(一),單機搭建android開發
單機搭建Android開發環境(一),單機搭建android開發 老話,工欲善其事必先利其器。為了學習安卓系統開發,我下了血
谷歌電子市場2--首頁,谷歌電子市場2--
谷歌電子市場2--首頁,谷歌電子市場2--1.ListView的封裝 ①getView的封裝 ②加載更多 &nbs