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

}

}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值