android之上传和下载文件、图片

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

}

}
}



发布了696 篇原创文章 · 获赞 104 · 访问量 94万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览