仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 629|回复: 12
打印 上一主题 下一主题

[学习教程] 了解下JAVA的用java多线程断点续传理论

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:24:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 00:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表