小女巫 发表于 2015-1-18 11:24:58

了解下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成为了大型项目的首选。

再见西城 发表于 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 发表于 2015-2-1 23:09:35

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

飘飘悠悠 发表于 2015-2-6 02:39:32

http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。

深爱那片海 发表于 2015-2-7 13:18:32

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

小妖女 发表于 2015-2-9 23:36:52

不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

不帅 发表于 2015-2-24 02:26:16

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

若相依 发表于 2015-3-7 10:29:38

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)

简单生活 发表于 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而写的。

愤怒的大鸟 发表于 2015-3-19 00:31:23

是一种使用者不需花费很多时间学习的语言

老尸 发表于 2015-3-26 19:49:44

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
页: [1]
查看完整版本: 了解下JAVA的用java多线程断点续传理论