- 浏览: 243551 次
- 性别:
- 来自: 湖南
最新评论
-
KANGOD:
android:overScrollMode="ne ...
去掉ScrollVIew拉到尽头时再拉的阴影效果 -
yangsongjing:
comsci 写道非常感谢.....希望大家的代码和文档都能够 ...
java DES 加密解密 算法 -
comsci:
非常感谢.....
希望大家的代码和文档都能够用一种简单的方 ...
java DES 加密解密 算法 -
yangsongjing:
不过2.3以下的版本没这个方法怎么解决啊?
去掉android scrollview滚动到顶部继续滚会出现一个渐变的颜色块 -
yangsongjing:
setOverScrollMode(View.OVER_SCR ...
去掉android scrollview滚动到顶部继续滚会出现一个渐变的颜色块
1 :DownloadTask类:
package com.youteach.util;
import java.io.File;
import java.net.URL;
import java.net.URLConnection;
import android.os.Message;
import android.util.Log;
public class DownloadTask extends Thread {
private int blockSize, downloadSizeMore;
private int threadNum = 5;
String urlStr, threadNo, fileName;
private int fileSize, downloadedSize;
private OnDownLoadCompetionListener listener;
/**
* @param urlStr
* 下载的URL
* @param threadNum
* 下载的线程数
* @param fileName
* 文件名
*/
public DownloadTask(String urlStr, int threadNum, String fileName,
OnDownLoadCompetionListener listener) {
this.urlStr = urlStr;
this.threadNum = threadNum;
this.fileName = fileName;
this.listener = listener;
Log.i("DownloadTask-->urlStr", urlStr + "");
Log.i("DownloadTask-->fileName", fileName + "");
}
@Override
public void run() {
FileDownloadThread[] fds = new FileDownloadThread[threadNum];
try {
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
// 获取下载文件的总大小
fileSize = conn.getContentLength();
// 计算每个线程要下载的数据量
blockSize = fileSize / threadNum;
// 解决整除后百分比计算误差
downloadSizeMore = (fileSize % threadNum);
File file = new File(fileName);
for (int i = 0; i < threadNum; i++) {
// 启动线程,分别下载自己需要下载的部分
FileDownloadThread fdt = new FileDownloadThread(url, file, i
* blockSize, (i + 1) * blockSize - 1);
fdt.setName("Thread" + i);
fdt.start();
fds[i] = fdt;
}
boolean finished = false;
while (!finished) {
// 先把整除的余数搞定
downloadedSize = downloadSizeMore;
finished = true;
for (int i = 0; i < fds.length; i++) {
downloadedSize += fds[i].getDownloadSize();
if (!fds[i].isFinished()) {
finished = false;
}
}
Log.i("DownloadTask-->downloadedSize", downloadedSize + "");
Log.i("DownloadTask-->fileSize", fileSize + "");
// 更新UI
if (listener != null) {
listener.onProgress(downloadedSize, fileSize);
}
// 休息1秒后再读取下载进度
this.sleep(1000);
}
// 下载完成
if (finished) {
if (listener != null) {
listener.onCompetion();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2 下载线程类:FileDownloadThread
package com.youteach.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URL;
import java.net.URLConnection;
/**
* @author gongchaobin
*
* android多线程下载
* 单个下载线程
*/
public class FileDownloadThread extends Thread{
private static final int BUFFER_SIZE=1024;
private URL url;
private File file;
private int startPosition;//当前线程下载的起点
private int endPosition;//当前线程下载的终点
private int curPosition;
private boolean finished=false; //用于标识当前线程是否下载完成
private int downloadSize=0;
public FileDownloadThread(URL url,File file,int startPosition,int endPosition){
this.url=url;
this.file=file;
this.startPosition=startPosition;
this.curPosition=startPosition;
this.endPosition=endPosition;
}
@Override
public void run() {
BufferedInputStream bis = null;
RandomAccessFile fos = null;
byte[] buf = new byte[BUFFER_SIZE];
URLConnection con = null;
try {
con = url.openConnection();
con.setAllowUserInteraction(true);
//设置当前线程下载的起点,终点
con.setRequestProperty("Range", "bytes=" + startPosition + "-" + endPosition);
//使用java中的RandomAccessFile 对文件进行随机读写操作
fos = new RandomAccessFile(file, "rw");
//设置开始写文件的位置
fos.seek(startPosition);
bis = new BufferedInputStream(con.getInputStream());
//开始循环以流的形式读写文件
while (curPosition < endPosition) {
int len = bis.read(buf, 0, BUFFER_SIZE);
if (len == -1) {
break;
}
fos.write(buf, 0, len);
curPosition = curPosition + len;
if (curPosition > endPosition) {
downloadSize+=len - (curPosition - endPosition) + 1;
} else {
downloadSize+=len;
}
}
//下载完成设为true
this.finished = true;
bis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean isFinished(){
return finished;
}
public int getDownloadSize() {
return downloadSize;
}
}
3 接口:OnDownLoadCompetionListener
package com.youteach.util;
public interface OnDownLoadCompetionListener {
public void onProgress(int progress, int total);
public void onCompetion();
}
转自:http://user.qzone.qq.com/363669440/blog/1352163034#!app=2&via=QZ.HashRefresh&pos=1352163034
package com.youteach.util;
import java.io.File;
import java.net.URL;
import java.net.URLConnection;
import android.os.Message;
import android.util.Log;
public class DownloadTask extends Thread {
private int blockSize, downloadSizeMore;
private int threadNum = 5;
String urlStr, threadNo, fileName;
private int fileSize, downloadedSize;
private OnDownLoadCompetionListener listener;
/**
* @param urlStr
* 下载的URL
* @param threadNum
* 下载的线程数
* @param fileName
* 文件名
*/
public DownloadTask(String urlStr, int threadNum, String fileName,
OnDownLoadCompetionListener listener) {
this.urlStr = urlStr;
this.threadNum = threadNum;
this.fileName = fileName;
this.listener = listener;
Log.i("DownloadTask-->urlStr", urlStr + "");
Log.i("DownloadTask-->fileName", fileName + "");
}
@Override
public void run() {
FileDownloadThread[] fds = new FileDownloadThread[threadNum];
try {
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
// 获取下载文件的总大小
fileSize = conn.getContentLength();
// 计算每个线程要下载的数据量
blockSize = fileSize / threadNum;
// 解决整除后百分比计算误差
downloadSizeMore = (fileSize % threadNum);
File file = new File(fileName);
for (int i = 0; i < threadNum; i++) {
// 启动线程,分别下载自己需要下载的部分
FileDownloadThread fdt = new FileDownloadThread(url, file, i
* blockSize, (i + 1) * blockSize - 1);
fdt.setName("Thread" + i);
fdt.start();
fds[i] = fdt;
}
boolean finished = false;
while (!finished) {
// 先把整除的余数搞定
downloadedSize = downloadSizeMore;
finished = true;
for (int i = 0; i < fds.length; i++) {
downloadedSize += fds[i].getDownloadSize();
if (!fds[i].isFinished()) {
finished = false;
}
}
Log.i("DownloadTask-->downloadedSize", downloadedSize + "");
Log.i("DownloadTask-->fileSize", fileSize + "");
// 更新UI
if (listener != null) {
listener.onProgress(downloadedSize, fileSize);
}
// 休息1秒后再读取下载进度
this.sleep(1000);
}
// 下载完成
if (finished) {
if (listener != null) {
listener.onCompetion();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2 下载线程类:FileDownloadThread
package com.youteach.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URL;
import java.net.URLConnection;
/**
* @author gongchaobin
*
* android多线程下载
* 单个下载线程
*/
public class FileDownloadThread extends Thread{
private static final int BUFFER_SIZE=1024;
private URL url;
private File file;
private int startPosition;//当前线程下载的起点
private int endPosition;//当前线程下载的终点
private int curPosition;
private boolean finished=false; //用于标识当前线程是否下载完成
private int downloadSize=0;
public FileDownloadThread(URL url,File file,int startPosition,int endPosition){
this.url=url;
this.file=file;
this.startPosition=startPosition;
this.curPosition=startPosition;
this.endPosition=endPosition;
}
@Override
public void run() {
BufferedInputStream bis = null;
RandomAccessFile fos = null;
byte[] buf = new byte[BUFFER_SIZE];
URLConnection con = null;
try {
con = url.openConnection();
con.setAllowUserInteraction(true);
//设置当前线程下载的起点,终点
con.setRequestProperty("Range", "bytes=" + startPosition + "-" + endPosition);
//使用java中的RandomAccessFile 对文件进行随机读写操作
fos = new RandomAccessFile(file, "rw");
//设置开始写文件的位置
fos.seek(startPosition);
bis = new BufferedInputStream(con.getInputStream());
//开始循环以流的形式读写文件
while (curPosition < endPosition) {
int len = bis.read(buf, 0, BUFFER_SIZE);
if (len == -1) {
break;
}
fos.write(buf, 0, len);
curPosition = curPosition + len;
if (curPosition > endPosition) {
downloadSize+=len - (curPosition - endPosition) + 1;
} else {
downloadSize+=len;
}
}
//下载完成设为true
this.finished = true;
bis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean isFinished(){
return finished;
}
public int getDownloadSize() {
return downloadSize;
}
}
3 接口:OnDownLoadCompetionListener
package com.youteach.util;
public interface OnDownLoadCompetionListener {
public void onProgress(int progress, int total);
public void onCompetion();
}
转自:http://user.qzone.qq.com/363669440/blog/1352163034#!app=2&via=QZ.HashRefresh&pos=1352163034
发表评论
-
ios公司账号申请流程记录
2020-08-04 17:04 3331.注册APPLE ID 2.填写公司信息,申请邓白氏码(企业 ... -
阿里百川HotFix接入指南
2017-04-11 14:46 1499阿里百川HotFix接入指南 1.首先需要成为阿里开放平台的开 ... -
安卓应用每次从后台切换到前台都会启动欢迎界面的问题
2016-07-15 09:18 2708问题描述: 应用安装后,通过安装界面的打开按钮打开应用,每当应 ... -
android性能分析工具整理
2016-03-28 22:57 668原文链接:http://www.jians ... -
android 技术经验归纳
2016-03-28 22:54 4701.android基于java,java的抽象封装要会用,并且 ... -
android面试提问
2015-11-16 11:54 0一。登录过程中需要取消登录 怎么中断连接 1)如果用httpc ... -
android 手机判断是否在充电 如断电自动打电话提醒功能
2015-05-18 11:14 3330public class MainActivity exten ... -
ANDROID应用安全防御
2015-04-02 10:06 1232Android应用的安全隐患包括三个方面:代码安全、数据安全和 ... -
Fragment加入Pagerview效果
2015-04-01 14:50 452转自 http://www.eoeandroid.com/t ... -
设计模式记忆方法(转)
2015-03-11 10:20 830设计模式的分类 创建型。 情景记忆:两个人在聊天。 ... -
android 数据库版本升级
2015-03-03 16:41 697数据库升级的意义 我 ... -
java 23种设计模式示例代码集合
2015-02-09 09:40 663策略模式,建造者模式,简单工厂模式,单例模式,抽象工厂模式 ... -
ios本地数据存储
2014-08-22 16:21 781在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题 ... -
ios 学习笔记3(界面的跳转和按钮事件等)
2014-08-21 16:50 15461.ios的很多应用程序都是采用多视图设计,控制器类型4种 ... -
iOS 学习笔记2(http get 登录)
2014-08-21 11:49 580// // ViewController.m // ... -
ios 学习笔记1
2014-08-21 11:48 813每个应用程序都有属于自己的UIWindow,UIWindow ... -
oc笔记6(NSNumber/NSValue/NSNull)
2014-08-20 18:04 818NSNumber: // 将int类型的10包装成一个NS ... -
oc笔记5(字典)
2014-08-20 17:23 731NSDictionary 通过唯一的key找到唯 ... -
oc笔记4(NSArray)
2014-08-20 15:41 14371.NSArray *array = [NSArray a ... -
oc笔记3(NSMutableString)
2014-08-20 14:54 7061.创建一个可变字符串 NSMutableString * ...
相关推荐
应用多线程MultiThread断点续传工具类,经典小例子。可运行。
该工具类封装了以断点续传方式进行下载的功能。
完整的java大文件分块上传支持断点续传,包含jar包,可以直接导入eclipse使用。
基于http协议的java断点续传http协议 断点续传 上传 java java断点续传
单文件Http工具类,支持GET,POST,断点续传,多线程断点续传
java实现ftp断点续传
C#多线程下载文件工具,可添加多任务,带断点续传功能
实现支持断点续传多线程下载的 Http Web 客户端工具类实现支持断点续传多线程下载的 Http Web 客户端工具类
断点续传内核的实现 主要用了 6 个类,包括一个测试类。 SiteFileFetch.java 负责整个文件的抓取,控制内部线程 (FileSplitterFetch 类 )。 FileSplitterFetch.java 负责部分文件的抓取。 FileAccess.java 负责...
一个写的很不错的断点续传,下载的工具类,亲测了一下,自己感觉还是很不错,虽然有点不是很完美,但是可以根据需要自己修改修改,十分方便!
规范的文件操作类 FileUtils:writeFile readFile.
文件操作工具类,支持文件上传和下载及断点续传
uploader 大文件、断点续传、分片、秒传、普通文件上传样例工具类包封装了一些关于分片md5验证、断点续传、分片上传、等方法前端样例使用百度插件 WebUploader , 插件的源码还是有一定的问题的样例包对插件源码做了...
绝对实用,本人做项目刚好用到,留着以后自己用的,有需要可以下载
断点续传 自动合并文件 手动合并文件 自定义添加请求头 1.界面精简 2.升级到.net 5 3.底层性能优化 相比之前的版本cpu使用率更低 4.增加插件功能 5.合并文件和下载功能合并 请求地址那里 如果是网络请求地址 就去...
Android多线程断点续传下载工具类
代码如下: /* .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient) * Reflector 了一下 System.Net.WebClient ,改写或增加了若干: * DownLoad、Upload 相关方法! * DownLoad 相关...
基于Java的的文件图片上传-分片上传-断点续传-秒传java源码.zip 1.主要功能经测试支持IE9以上,Chrome,FireFox;其他浏览器未测试; 2.文件上传部分:主要实现了文件的上传,进度条,多文件一起上传,上传前删除,...
本资源包“Java多线程与线程安全实践-基于Http协议的断点续传.rar”是一个针对计算机科学专业学生设计的毕业设计或课程项目源码文件集合。该项目旨在通过实现一个基于HTTP协议的文件断点续传功能,深入探索和实践...