仓酷云
标题:
了解下JAVA的用java多线程断点续传理论
[打印本页]
作者:
小女巫
时间:
2015-1-18 11:24
标题:
了解下JAVA的用java多线程断点续传理论
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.
annegu做了一个复杂的Http多线程的下载程序,来会商一下多线程并发下载和断点续传的成绩。
这个程序的功效,就是能够分多个线程从方针地点高低载数据,每一个线程负责下载一部分,并能够撑持断点续传和超时重连。
下载的办法是download(),它吸收两个参数,分离是要下载的页面的url和编码体例。在这个卖力下载的办法中,次要分了三个步骤。第一步是用来设置断点续传时分的一些信息的,第二步就是次要的分多线程来下载了,最初是数据的合并。
1、多线程下载:
/** *//** http://www.bt285.cn http://www.5a520.cn
*/
public String download(String urlStr, String charset) {
this.charset = charset;
long contentLength = 0;
CountDownLatch latch = new CountDownLatch(threadNum);
long[] startPos = new long[threadNum];
long endPos = 0;
try {
// 从url中取得下载的文件格局与名字
this.fileName = urlStr.substring(urlStr.lastIndexOf("/") + 1);
this.url = new URL(urlStr);
URLConnection con = url.openConnection();
setHeader(con);
// 失掉content的长度
contentLength = con.getContentLength();
// 把context分为threadNum段的话,每段的长度。
this.threadLength = contentLength / threadNum;
// 第一步,剖析已下载的一时文件,设置断点,假如是新的下载义务,则创建方针文件。在第4点中申明。
startPos = setThreadBreakpoint(fileDir, fileName, contentLength, startPos);
//第二步,分多个线程下载文件
ExecutorService exec = Executors.newCachedThreadPool();
for (int i = 0; i < threadNum; i++) {
// 创立子线程来卖力下载数据,每段数据的起始地位为(threadLength * i + 已下载长度)
startPos[i] += threadLength * i;
/**//*设置子线程的停止地位,非最初一个线程即为(threadLength * (i + 1) - 1)
最初一个线程的停止地位即为下载内容的长度*/
if (i == threadNum - 1) {
endPos = contentLength;
} else {
endPos = threadLength * (i + 1) - 1;
}
// 开启子线程,并实行。
ChildThread thread = new ChildThread(this, latch, i, startPos[i], endPos);
childThreads[i] = thread;
exec.execute(thread);
}
try {
// 守候CountdownLatch旌旗灯号为0,暗示一切子线程都停止。
latch.await();
exec.shutdown();
// 第三步,把分段下载上去的一时文件中的内容写进方针文件中。在第3点中申明。
tempFileToTargetFile(childThreads);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
<p>
有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。
作者:
再见西城
时间:
2015-1-19 23:28
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
再现理想
时间:
2015-1-22 07:30
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
兰色精灵
时间:
2015-1-24 15:40
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者:
admin
时间:
2015-2-1 23:09
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者:
飘飘悠悠
时间:
2015-2-6 02:39
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者:
深爱那片海
时间:
2015-2-7 13:18
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
小妖女
时间:
2015-2-9 23:36
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
不帅
时间:
2015-2-24 02:26
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
若相依
时间:
2015-3-7 10:29
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
简单生活
时间:
2015-3-11 16:00
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者:
愤怒的大鸟
时间:
2015-3-19 00:31
是一种使用者不需花费很多时间学习的语言
作者:
老尸
时间:
2015-3-26 19:49
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2