/afinal------https://github.com/yangfuhai/afinal
-------------android原生http多线程下载文件\图片:------------
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void postHttp(){
String path="http://www.baiducim";
URL url= null;
try {
url = new URL(path);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
int code=conn.getResponseCode();//获取状态码
if(code==200){
//
int length=conn.getContentLength();//获取服务器端要下载的文件的大小;
RandomAccessFile rafile=new RandomAccessFile("temp.exe","rw");
rafile.setLength(length);
//每个线程下载的开始和结束位置
int blockSize =length/3;//3个线程,每个线程要分多少kb
for(int i=0;i<3;i++){
int startIndex=i*blockSize;//每个线程的开始位置
int endIndex=(i+1)*blockSize-1;//结束位置
if(i==2){//最后一个线程
endIndex=length-1;//结束位置
}
new DownLoadThread(startIndex,endIndex,i).start();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class DownLoadThread extends Thread{
private int startIndex;
private int endIndex;
private int threadId;
public DownLoadThread(int startIndex,int endIndex,int threadId){
this.startIndex=startIndex;
this.endIndex=endIndex;
this.threadId=threadId;
}
@Override
public void run(){
String path="http://www.baiducim";
URL url= null;
try {
url = new URL(path);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
conn.setRequestProperty("Range","bytes="+startIndex+"-"+endIndex);//在请求头中标记每个线程的开始位置和结束位置
int code=conn.getResponseCode();//获取状态码
if(code==206){
//
int length=conn.getContentLength();//获取文件的大小;
//在客户端创建和服务器端一样大小的空间
RandomAccessFile rafile=new RandomAccessFile("temp.exe","rw");
rafile.seek(startIndex);//每个线程要从给自己的开始位置
InputStream in=conn.getInputStream();
int len=-1;
byte[] bufffer=new byte[1024];
while((len=in.read(bufffer))!=-1){
rafile.write(bufffer,0,len);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}