Android网络编程(二)

在Android的网络编程中,经常遇到下载文件的情况,而多线程下载能够提高下载的效率,这里我以Java中的代码来操作,因为Android中的网络操作与JAVA代码大同小异
1.根据之前的博客网络编程(一)得到openConnection,并且判断响应码是否为200
2.当响应码是200的时候说明访问成功:
3.首先获取要下载的资源的大小:
int length=openConnection.getContentLength()
4.在本地创建与服务器端相应大小的资源文件:
RandomAccessFile randomFile=new RandomAccessFile(new File(“文件的路径”),”rw”);
randomFile.setLength(length); 这里设置随机访问文件的大小
5.首先定义线程的数量(threadNum),定义变量为每一个线程的下载资源的大小(blockSize)
blockSize=length/threadNum;
6.for(i=0;i< threadNum;i++){
//定义变量记录线程下载的开始的位置:
int startIndex=-1;
//定义变量记录线程下载的结束的位置
int endIndex=-1;
startIndex=i*blockSize;
endIndex=(i+1)*blockSize-1;

//如果是最后一个线程,结束的位置需要单独的计算
if(i=threadNum-1){
endIndex=length-1;
}

}
7.定义一个静态类,继承Thread开启新的线程,覆写其中的run方法,这里要传入startIndex的几个参数,故可以加上构造方法。再次利用网络编程(一)中的方法获得openConnection;
//设置分段数据下载的头信息,注意Range是做分段请求数据用的,bytes:0-500指的是服务器资源0-500的字节的信息
openConnection.setRequestProperty(“Range”,”bytes:”+startIndex+”-“+endIndex);
8.判断响应码,这里只需要响应码是206也就是部分资源请求成功就行了
9.这里获得openConnection的输入流,把数据写入RandomAccessFile的文件中
写入文件,模板代码:

InputStream input=openConnection.getInputStream();
RandomAccessFile randomFile=new RandomAccessFile(new File("文件的路径"),"rw");
randomFile.seek(startIndex);        //设置随机文件从那个位置开始写
//将流写入文件
byte[]  buffer=new byte[1024];
int length=-1;
while((length=input.read(buffer))!=-1){
    randomFile.wirte(buffer,0,length);
}
input.close();
ramdomFile.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值