Android 使用Get方式实现断点下载(一)
来源:互联网 发布:淘宝口令查评价生成器 编辑:程序博客网 时间:2024/04/27 14:11
public class DownloadActivity extends Activity implements OnClickListener{ private String path; private static final int THREAD_NUM = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = new Button(this); button.setOnClickListener(this); } @Override public void onClick(View v) { download(path); } private void download(String path) { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); if (conn.getResponseCode() == 200) { int length = conn.getContentLength(); RandomAccessFile raf = new RandomAccessFile("down.exe", "rwd"); raf.setLength(length); raf.close(); int blocksize = length / THREAD_NUM; for (int i = 1; i <= THREAD_NUM; i++) { int start = (i-1) * blocksize; int end = i * blocksize - 1; if (i == THREAD_NUM) { end = length; } System.out.println("线程:"+i + "下载:" + start + "---->" + end); new DownloadThread(i, start, end, path).start(); } }else { System.out.println("服务器错误!"); } } catch (Exception e) { e.printStackTrace(); } } class DownloadThread extends Thread{ private int threadId; private int start; private int end; private String path; public DownloadThread(int threadId,int start,int end, String path){ this.threadId = threadId; this.start = start; this.end = end; this.path = path; } @Override public void run() { try { int tempLen=0; //先读取临时文件 File temFile = new File(threadId+".txt"); if (temFile.exists()) { FileInputStream fis = new FileInputStream(temFile); byte[] buffer = new byte[1024]; int len = fis.read(buffer); tempLen = Integer.parseInt(new String(buffer,0,len)); start += tempLen; } URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Range", "bytes=" + start + "-" + end); conn.setConnectTimeout(5000); int total=0; if (conn.getResponseCode() == 206) { InputStream inputStream = conn.getInputStream(); RandomAccessFile raf = new RandomAccessFile("down.exe", "rwd"); raf.seek(start); byte[] buffer = new byte[1024]; int len = -1; while((len = inputStream.read(buffer))!=-1){ RandomAccessFile tempRaf = new RandomAccessFile(threadId+".txt", "rwd"); raf.write(buffer, 0 , len); total+=len; System.out.println("线程:"+threadId + "下载total:" + total); tempRaf.write(((tempLen + total) + "").getBytes()); tempRaf.close(); } raf.close(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }}
0 0
- Android 使用Get方式实现断点下载(一)
- Android断点下载实现
- libcurl post/get上传下载文件 以及断点下载(操作libcurl 实现断点下载(续点续传))
- android中实现文件线程下载并记录进度值,不支持断点下载(一)
- (Android小应用)在Android中实现多线程断点下载(连载一)
- (Android小应用)在Android中实现多线程断点下载(连载一)
- Android-多线程断点下载详解及源码下载(一)
- Android 多线程文件断点下载器实现(造轮子系列)(一)
- android 多线程断点下载实现
- android如何实现断点下载
- Android实现多线程断点下载
- Android实现多线程断点下载
- 使用NSURLConnection实现断点下载
- 使用libCurl实现断点下载
- android使用http协议实现多线程断点下载
- Android 学习笔记之使用多线程实现断点下载
- 使用okgo实现文件下载(断点下载)
- HTTpClient实现get方式下载
- java基础(九),File
- FZU-1054 阅读顺序(水、反转字符串处理)
- struts2中获取request、session、response、application方式
- poj 1283(递推ordp)
- mvn是什么
- Android 使用Get方式实现断点下载(一)
- Socket 客户端-服务器(C-S)通信实验
- MFC学习——“逃跑”按钮的实现
- [bzoj4520][Cqoi2016]K远点对
- Hive数据类型及常用操作总结(一)
- 安卓实训之——页面滑动ViewPager
- Git入门介绍
- ZOJ-3944 People Counting From 第13届浙江省赛
- 【bzoj4521】【CQOI2016】【手机号码】【数位dp】