了解下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;
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 += 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, endPos);
childThreads = 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成为了大型项目的首选。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 是一种使用者不需花费很多时间学习的语言 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
页:
[1]