基于HTTP协议的断点续传应用系统开发毕业设计说明书论文

上传人:沈*** 文档编号:100489108 上传时间:2022-06-02 格式:DOC 页数:47 大小:771.50KB
返回 下载 相关 举报
基于HTTP协议的断点续传应用系统开发毕业设计说明书论文_第1页
第1页 / 共47页
基于HTTP协议的断点续传应用系统开发毕业设计说明书论文_第2页
第2页 / 共47页
基于HTTP协议的断点续传应用系统开发毕业设计说明书论文_第3页
第3页 / 共47页
点击查看更多>>
资源描述
41 / 47本科毕业设计说明书论文题目:基于协议的断点续传应用系统开发毕业设计论文原创性声明和使用授权说明原创性声明本人重承诺:所呈交的毕业设计论文,是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了意。作 者 签 名:日 期:指导教师签名: 日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计论文的规定,即:按照学校要求提交毕业设计论文的印刷本和电子版本;学校有权保存毕业设计论文的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部容。作者签名: 日 期:基于协议的断点续传应用系统开发摘 要文件的上传下载是计算机网络核心应用之一。计算网络的发展围绕在怎样使得文件上传下载更快、更好、更安全。当今的网络时代,下载软件是使用最频繁的软件之一,而网络的不稳定常常造成数据传输的不稳定,为了获得可靠、高效的数据传输,断点续传技术应运而生。本系统开发基于协议,具有断点续传、多线程下载功能,这些功能的实现大大减少资源的浪费,节省用户下载的时间。本系统的开发用到了多线程技术、网络编程、I/O流技术和Swing用户界面编程,涉及到J2SE中一些基本技术,达到了综合运用所学过的Java知识的目的。本文对系统的需求分析、关键技术和难点进行了的详细描述,同时又详细介绍本系统的设计与实现。关键词:断点续传,多线程,下载,THE DEVELOPMENT OF TECHNOLOGY FOR DOWNLOADING CONTINUOUSLY FROM BREAK POINTSSYSTEM BASED ON PROTOCOLABSTRACT To upload and download files is one of core applications of computer network.Development of network computing is how to make file upload and download faster, better, more secured. At present,the softwares for downloading filesare used frequently. Data transmission problem that is caused by network instability is quite unstable.In order to obtain reliable and efficient data transfer, TDCBPtechnology turns out.Based on the protocol, the system implementstechnology for downloading continuously from break points . It is also dependent on multi-threadsprogramming,which greatly reduces resources and saves downloading time. During development of system, it utilizes a multi-threading, network programming, I/O streaming technology, and Swing library for user interface programming.And then it reaches the purpose of integrated application based on Java.This article not only analyzes the requirements of this system with detailed descriptions of the key technology and dificulties, but also introduces the system design in detail and implementationof this system.Key Words: tdcbp, multithreading, download, 目 录摘要1ABSTRACT2第一章绪论11.1研究的背景11.2研究的意义11.3研究的目标21.4可行性分析21.4.1技术可行性21.4.2操作可行性31.5论文容概述3第二章相关理论与技术42.1JAVA的简介42.2Swing技术简介62.2.1Swing组件的简介82.3Eclipse的简介102.3.1Eclipse的起源和发展102.3.2Eclipse的体系结构102.4协议的简介112.5开发环境122.6本章小结12第三章需求分析及关键技术和难点133.1用户需求分析133.2系统功能需求分析143.2.1下载任务实体类的基本功能分析143.2.2系统工具类的基本功能分析153.2.3线程下载类的基本功能分析153.2.4下载任务总线程控制类的基本功能分析153.2.5用户界面类的基本功能分析163.3系统流程及模块划分163.4关键技术和难点173.4.1Java多线程技术173.4.2Java I/O流技术183.5本章小结20第四章系统详细设计与实现214.1系统基本流程214.2系统功能模块设计224.2.1系统下载功能的实现224.2.2断点续传功能的设计与实现264.2.3多线程的设计与实现284.2.4文件序列化保存下载信息304.2.5系统界面设计314.3本章小结33第五章系统运行测试345.1系统测试345.1.1数据正确性测试345.1.2系统功能测试355.2本章小结38第六章总结39参考文献40致42附录43附录1 毕业设计文献综述43附录2 毕业设计开题报告43附录3 毕业设计外文翻译中文译文与外文原文43第一章 绪论1.1 研究的背景文件的上传下载是计算机网络核心应用之一。计算网络的发展围绕在怎样使得文件上传下载更快,更好,更安全的核心周围1。当今的网络时代,下载软件是使用最频繁的软件之一。这些年来,下载技术一直在发展,最原始的下载功能仅仅是个下载过程,即从WEB服务器上连续地读取文件。其最大的问题是,由于网络的不稳定性或者异常的操作,一旦连接断开使得下载过程中断,就不得不全部从头再来一次。随后,断点续传的概念就出来了。断点续传,顾名思义就是如果下载中断,在重新建立连接后,跳过已经下载的部分,而只下载没有下载的部分。这样可以大大减少资源的浪费,节省下载的时间2。自从多线程下载技术发明以来,这项技术得到前所未有的关注已是不争的事实。在网络蚂蚁软件流行开后,许多下载软件也都纷纷效仿,是否具有多线程下载技术、甚至能支持多少个下载线程都成了人们评测下载软件的要素。多线程下载的基础是WEB服务器支持远程的随机读取,也即支持断点续传。这样,在下载时可以把文件分成若干部分,每一部分创建一个下载线程进行下载3。JAVA又是一种适用于平滑移植、安全、健壮和可扩展等跨平台开发语言,能开发出跨平台的应用对象和应用程序,所以本系统的实现后可以在多个操作系统平台上运行,如WINDOWS、Linux等,甚至是在非PC上,比如手机或PDA上该设计采用JAVA多线程与线程安全机制,在一定程度上能提高下载的速度和安全性4。1.2 研究的意义多线程和传统的单线程在程序设计上最大的区别是各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行,由此带来的线程调度问题。多线程进行断点续传,还要记录多个断点位置,且记录断点位置时也要考虑同步互斥等问题,这些都使得设计开发变得更复杂,但是可以明显提高网络文件的下载速度6。现在,不要说编写专门的下载软件,在自己编写的软件中,加入下载功能有时也非常必要。1.3 研究的目标开发基于协议的断点续传应用系统,其目标是为了方便用户,提供给用户便捷的下载方式,更快的下载速度。本系统充分利用了网络上的多余带宽,采用断点续传技术,能在上次中止部位继续下载,有效避免了重复劳动,大大节省了下载者的连线下载时间。1.4 可行性分析可行性研究的目的,就是用最小的代价在尽可能短的时间确定问题是否能够解决。要达到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。系统的可行性分析主要包括技术上的可行性和操作上的可行性。本系统的可行性分析如下:1.4.1 技术可行性下载程序功能模块的实现主要利用了面向对象的Java高级编程语言。使用Java作为开发工具主要是因为Java是目前比较流行而且非常成功的编程语言。多线程编程技术是Java语言的重要特点。多线程编程的含义是将程序任务分成几个并行的子任务。特别是在网络编程中,有很多功能是可以并发执行的。Java中实现多线程的类有两种方法:1.扩展java.lang.Thread类,用它覆盖Thread类的run方法。2.生成实现java.lang.Runnable接口的类并将其它的实例与java.lang.Thread实例相关联。Thread类是负责向其它类提供线程支持的最主要的类,要使用一个类具有线程功能,在Java中只要简单地从Thread类派生一个子类就可以了。扩展Thread类,如printThread.java。由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。本系统使用Eclipse的SWING图形界面技术进行开发。系统的可行性分析主要包括技术上的可行性和操作上的可行性。1.4.2 操作可行性下载程序的具备友好的用户界面,而且操作简单易于被用户接收,使用此下载程序十分方便,因为软件的操作思路比较清晰,而且用户实际操作的容较少,所以用户只需要熟练操作计算机即可。因此从使用操作方面看,此系统得开发是可行的。1.5 论文容概述各章节的主要容如下: 第一章是绪论,讨论课题的研究背景、意义和研究目标,及可行性分析,包括技术可行性,操作可行性。第二章是软件开发工具和技术介绍,主要介绍了毕业设计中用到的技术及开发工具。第三章是需求分析,介绍系统业务流程概况,主要阐述了在线作业系统功能模块的需求用例。第四章是概要设计和详细设计,描述了数据库设计方案,以及各功能模块的技术实现方案。 第五章是系统实现,这一章主要讲了开发环境及配置,并通过两个典型例子介绍了该系统的技术实现架构,阐述技术关键及解决方法和经验总结。第六章是结束语。第二章 相关理论与技术本系统用JAVA技术开发,开发工具是eclipse,涉及到JAVA多线程、swing、等相关技术,本章将对上述技术进行简要的阐述。2.1 JAVA的简介Java 技术既是一种高级的面向对象的编程语言,也是一个平台。Java 技术基于 Java 虚拟机Java virtual machine,JVM的概念 这是语言与底层软件和硬件之间的一种转换器。Java 语言的所有实现都必须实现 JVM,从而使 Java 程序可以在有 JVM 的任何系统上运行6。Java 编程语言Java programming language与众不同之处在于:Java 程序既是编译型的compiled转换为一种称为 Java 字节码的中间语言,又是解释型的interpretedJVM 对字节码进行解析和运行。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对 JVM 优化过的机器码形式;解释器是 JVM 的实现。Java 平台Java platform是一种纯软件平台,它可以在各种基于硬件的平台上运行。它有三个版本参见后面的Java 平台的多个版本。它由 JVM 和 Java 应用程序编程接口Java Application Programming Interface,API组成。Java API 是一个大型的现成软件组件类集合,它可以简化 applet 和应用程序的开发和部署,包括健壮、安全且可互操作的企业应用程序。它涵盖从基本对象到连网和安全性,再到 XML 生成和 Web 服务的所有东西。Java API 组织成相关类和接口的库;库也称为包package。除了 Java API 之外,每个完整的 Java 平台实现还包含:n 用来编译、运行、监视、调试应用程序以及建立应用程序文档的开发工具。n 用来部署应用程序的标准机制。n 用来创建复杂的图形用户界面GUI的用户界面工具包。n 用来启用数据库访问和操作远程对象的集成库。Java 技术是最初由 Sun Microsystems 公司开发的。Java Community ProcessJCP,一个由全世界的 Java 开发人员和获得许可的人员组成的开放性组织对 Java 技术规、参考实现和技术兼容性包进行开发和修订。在 2006 年 8 月,Sun Microsystems 宣布它打算开放 Java 平台的源码,并开始征询对许可协议和管理方式的反馈7。Java 语言的主要好处是,Java 应用程序可以跨硬件平台和操作系统进行移植 这是因为每个平台上安装的 JVM 都可以理解同样的字节码。Java 语言和平台的可伸缩性非常强。在低端,现有的应用程序可以很容易地适应存资源有限的设备。这种语言是进行服务器端 Web 编程的理想框架。因为它被设计为按照一种安全的方式通过网络运行,在通过互联网进行操作时,它提供了一定程度的安全性。在本质上,Java 技术将用户的计算能力从桌面扩展到了 Web 资源。Web 组件由称为Web 容器Web container的运行时平台支持,Web 容器的服务包括请求分派、安全性、并发性、生命周期管理以及对命名、事务和电子等 API 的访问。在高端,Java应用服务器application server作为 Java 组件、XML 和 Web 服务的 Web 容器,可以与数据库进行交互并提供动态的 Web 容;它们还为企业应用程序提供应用程序开发环境,具有事务管理、安全性、集群、性能、可用性、连接性和可伸缩性等功能。Java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发: Java SEJava Platform,Standard Edition。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise EditionJava EE提供基础。大多数 Java 开发人员使用 Java SE 5,也称为 Java 5.0 或 Tiger2006 年 6 月,Java SE 6 或 Mustang 发布了 beta 版。Java EEJava Platform,Enterprise Edition。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构service-oriented architecture,SOA和 Web 2.0 应用程序。 Java EEJava Platform,Enterprise Edition。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构service-oriented architecture,SOA和 Web 2.0 应用程序。Java MEJava Platform,Micro Edition。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备比如手机、PDA、电视机顶盒和打印机上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能8。本系统是基于Java SE开发。2.2 Swing技术简介Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包AWT为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。Swing的体系结构如图2.2所示图2.2Swing的体系结构Swing的主要特性包括:Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级light-weight组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类Peer实现,因此,Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其他特性。Swing采用了一种MVC的设计式,即模型-视图-控制器Model-View-Controller,其中,模型用来保存容,视图用来显示容,控制器用来控制用户输入。Swing采用可插入的外观感觉Pluggable Look and Feel,PL&F。相对而言,在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。而Swing使得程序在一个平台上运行时能够有不同的外观,用户可以选择自己习惯的外观。Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件以J开头,除了拥有与AWT类似的按钮utton、标签JLabel、复选框JCheckBox、菜单JMenu等基本组件外,还增加了一个丰富的高层组件集合,如表格JTable、树JTree9。如图2.3所示:图2.3 Swing组件2.2.1 Swing组件的简介1MVCModel-View-Controller体系结构前面我们提到,Swing胜过AWT的主要优势在于MVC体系结构的普遍使用。在一个MVC用户界面中,存在3个通信对象:模型、视图和控件。模型是指定的逻辑表示法,视图是模型的可视化表示法,而控件则指定了如何处理用户输入。当模型发生改变时,它会通知所有依赖它的视图,视图使用控件指定其相应机制。为了简化组件的设计工作,在Swing组件中视图和控件两部分合为一体。每个组件都有一个相关的分离模型和它使用的界面包括视图和控件。比如,按钮utton有一个存储其状态的分离模型ButtonModel对象。组件的模型是自动设置的,例如,一般都使用utton而不是使用ButtonModel 对象。另外,通过Model类的子类或通过实现适当的接口,可以为组件建立自己的模型。用setModel方法把数据模型与组件联系起来。MVC是现有的编程语言中制作图形用户界面的一种通用思想,其思路是把数据的容本身和显示方式分离开,这样就使得数据的显示更加灵活多样。比如,某年级各个班级的学生人数是数据部分,而显示方式可以是多种多样的,既可以采用柱状图显示,也可以采用饼图显示,还可以采用直接的数据输出。因此在设计时,考虑把数据和显示方式分开,对于实现多种多样的显示是非常有帮助的。2可存取性支持所有的Swing组件都实现了Accessible接口,提供对可存取性的支持,使得辅助功能如屏幕阅读器能够十分方便地从Swing组件中得到信息。3支持键盘操作在Swing组件中,使用JComponent类的registerKeyboardAction方法,能使用户通过键盘操作来替代鼠标驱动GUI上Swing组件的相应动作。有些类还为键盘操作提供了更便利的方法,其实这就相当于热键,使得用户可以只用键盘进行操作。4设置边框对Swing组件可以设置一个或多个边框。Swing中提供了各式各样的边框供用户选用,也能建立组合边框或自己设计边框。一种空白边框可以增大组件,同时协助布局管理器对容器中的组件进行合理的布局。Hibernate的体系结构如图2.3所示。图2.3 Hibernate体系结构图图2.3各对象的说明如下:SessionFactory:针对单个数据库映射关系经过编译后的在镜像,是线程安全的,它是生成Session的工厂。Session:表示应用程序与持久存储层之间交互操作的一个单纯种对象,此对象生存期很短。其隐藏了JDBC连接,也是Transaction的工厂。持久对象及集合:带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的JavaBeans/POJO,唯一特殊的是他们正与仅仅一个Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。瞬态transient和脱管detached的对象及其集合:那些目前没有与session关联的持久化类实例。他们可能是在被应用程序实例化后,尚未进行持久化的对象,也可能是因为实例化他们的Session已经被关闭而脱离持久化的对象。事务Transaction:应用程序用来指定原子操作单元围的对象,它是单线程了,生命周期很短。Hibernate作为模型/数据访问层。它通过配置文件hiberante.cfg.xml或hibernate.properties和映射文件*.hbm.xml把java对象或持久化对象Persistent Obeject,PO映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作。2.3 Eclipse的简介目前Eclipse在系统开发领域中受到空前关注,国外许多软件公司纷纷开始采用Eclipse作为开发平台。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具Java Development Tools,JDT10。2.3.1 Eclipse的起源和发展Eclipse的前身是IBM的Visual Age。由于意识到Visual Age存在难以扩展、底层技术较为脆弱、很难与WebSphere Studio软件集成等诸多问题,进一步发展甚为困难,同时也面临包括Symantec公司的Visual Caf、Borland公司的uilder 等开发工具的竞争压力,IBM决定创建一个更开放的,并且可以为IBM其他开发工具提供支持的一体化开发平台。1998年11月,IBM专门成立了一个项目开发小组,开始开发该平台,20XX新一代开发平台诞生,这就是大家所熟悉的Eclipse。20XX11月,IBM做出了一个重大决定,将Eclipse采用开放源码的授权和运作模式发布,以增强业界对Eclipse的关注度并加快其推广应用速度。随后,IBM于20XX12月向外界宣布,捐赠价值4千万美元的Eclipse源码给开源社区;成立由成员公司组成的Eclipse协会Eclipse Consortium,以便支持并促进Eclipse开源项目。事实证明,IBM的决策非常英明。Eclipse受到广泛关注,蜂拥而至的用户使得其下载服务器一度阻塞,给业界带来了久违的震撼!IBM趁热打铁,在EclipseCon 2004上宣布成立一个独立的、非盈利性的基金会,由该基金会负责管理和指导Eclipse开发,目前其成员多达近百家知名公司,其中包括Borland、Rational Software、RedHat、Sybase、Google和Oracle等业界巨头。2.3.2 Eclipse的体系结构Eclipse平台体系结构主要由5部分组成,分别是平台运行库、工作区、工作台、团队支持和帮助。图2.4为Eclipse体系结构图。在运行时核是整个架构的核心,其他部件都是以插件方式来实现的。Eclipse采用动态加载机制,即只有需要的才加载,这样可以降低启动时间,提高资源使用效率11。2.4 为Eclipse体系结构图工作空间插件即所谓的工作区,主要负责管理用户资源,例如用户创建项目的管理、文件变更等,并负责通知其他插件关于资源变更的信息。工作台插件是Eclipse 提供的用户界面。它使用标准窗口工具包SWT和一个更高级的APIJFace构建的。SWT是Java的Swing/AWT的非标准替代者,JFace则以SWT为基础,但更易于使用。团队支持插件负责提供版本控制和配置管理支持。它允许用户根据需要添加视图,并与允许用户使用的任何版本控制系统交互。帮助插件允许以HTML文件形式添加文档,并提供了一个附加的导航结构以便用户使用帮助功能搜索相关信息12。2.4 协议的简介下载文件是电脑与WEB服务器交互的过程,它们交互的语言的专业名称是协议。传送文件的协议有多种,最常用的是和FTP文件传送协议,我采用的是。是一个客户端和服务器端请求和应答的标准TCP。客户端是终端用户,服务器端是。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口默认端口为80的请求。我们称这个客户端叫用户代理user agent。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器origin server。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道tunnels。尽管TCP/IP协议是互联网上最流行的应用,协议并没有规定必须使用它和基于它支持的层。 事实上,可以在任何其他互联网协议上,或者在其他网络上实现。只假定其下层协议提供可靠的传输,任何能够提供这种保证的协议都可以被其使用。通常,由客户端发起一个请求,建立一个到服务器指定端口默认是80端口的TCP连接。服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器向客户端发回一个状态行,比如/1.1 200 OK,和响应的消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息13。使用TCP而不是UDP的原因在于打开一个一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。Spring的精简项目的代码量方面做出了非常出色的工作,将大量需要重复书写的代码提取出来,进行切面编程。配置文件的灵活性也使项目的灵活性得到的加强,可以在不改变代码的情况下,而只有改变其中的配置文件实现整个系统的改变14。协议最基本的命令有三条:Get、Post和Head。Get从WEB服务器请求一个特定的对象,比如HTML页面或者一个文件。WEB服务器通过一个Socket连接发送此对象作为响应,Head命令使服务器给出此对象的基本描述,比如对象的类型,大小和更新时间。Post命令用于向WEB服务器发送数据,通常使把信息发送给一个单独的应用程序。2.5 开发环境操作系统: Windows XP、或Windows 7视窗操作系统;开发平台:eclipse硬件环境建议:CPU为Intel P3 800以上,至少256M存,10M/100M自适应以太网卡,网络应与Internet连通,带宽大于512K;最佳浏览分辨率:1024768;2.6 本章小结本章以系统开发的相关理论及技术为基础,介绍系统开发过程中需要了解和掌握的理论和技术。着重介绍了JAVA、Swing技术、协议,同时明确了系统开发的总体原则。第三章需求分析及关键技术和难点3.1 用户需求分析随着Internet的发展,进入信息时代后快速获得网络共享资源成为很简单的事情,人们对互联网也有了很大的依赖性。人们甚至希望只轻松点击鼠标就可以得到自己想要的东西。比如,针对一些专业的论坛提供了很多相关资料以方便人们阅读或了解;还有更多的人希望能过下载到他们喜欢听得音乐、好看的图片、喜欢的电影等等。也可以看出人们在上网时再也不单是打开浏览器来浏览网页,越来越多的人们开始使用下载软件来获取资源。同时人们也更希望使用更新更快的下载软件。由于用户下载需求的增大,也要求下载软件能够迅速完成对资源的下载。多线程程序设计可以很好的解决程序并发的问题。最恰当的比喻就是用户会感到CPU似乎同时出现在两个地方,在下载软件中应用多线程技术可以理解为将一个下载任务分成若干份来完成,其中的并发控制将使下载的效率大大提高。由于下载资源是一个过程,当中用到的时间可能会很长。那么在很长的这段时间中很有可能会出现很多的意外情况使下载中断或是停止,比如电源意外被切断、网络中断、或是操作系统故障导致系统重新启动。这些原因都会导致下载的中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来。断点续传就是用来解决这样的问题的,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。随着使用下载工具的时间的增长,用户下载的资源越来越多,因此在下载列表中的项目也越来越多,越来越混乱,因此为了便于管理和用户使用方便,用户迫切希望下载工具具有下载文件分类的功能。在下载任务的管理这一块,用户不仅希望下载工具具有下载一个一个资源的功能,而且具有批量下载有些相似的或有关联的资源的功能。还有些特殊情况下,用户在下载任务开始后由于种种原因希望放弃资源的下载,这就要求下载工具具有删除任务的功能了。为了对下载任务进行掌控,用户往往具有设置下载任务的线程数,文件下载网址,文件下载存储目录和在下载过程中对下载任务的状态进行监控等功能需求15。鉴于某些软件使用初学者甚至某些电脑初学者的实际情况,他们往往需要系统有一个格外的帮助文档,使他们能够更快、更好地学会使用断点续传下载软件,提高效率。3.2 系统功能需求分析本节对系统下载任务实体类的功能、系统工具类的功能、线程下载类的功能分析、下载任务总线程控制类的功能、用户界面类的功能等五个功能模块进行需求分析。3.2.1 下载任务实体类的基本功能分析对于该系统来说,就是技术断点续传的多线程下载工具,下载任务的所有信息应该被定义在一个实体类中。在下载之前,首先要知道下载任务对应的URL地址,换句通俗的话来说,就是要知道从哪里来下载文件;其次需要知道下载任务对应文件的大小,文件的大小以字节数来衡量;然后需要知道下载任务要使用几个线程,这样才能根据文件总的大小来计算出每个线程要下载的那一小段的大小;最后还需要知道下载完的文件存放的目录和存放的文件名。此外为了支持断点续传功能,在下载任务实体类中还需要定义上次文件下载长度和当前文件已下载长度。如下图3.1所示:上次文件下载长度当前文件已下载长度下载任务实体类下载任务的URL下载文件的大小下载文件存放目录图3.1 下载任务实体类中定义的属性3.2.2 系统工具类的基本功能分析系统工具类主要负责定义测试连接URL是否有效的方法以及获取要下载的资源文件名称、长度和MIME信息的方法。其功能定义如下图3.2所示:测试连接URL是否有效获取下载源文件信息系统工具类图3.2 系统工具类的功能3.2.3 线程下载类的基本功能分析线程下载类负责定义每个线程具体下载的实现细节,该类本身应该是一个线程类,该类定线程的基本信息如线程id号,文件下载的开始点和结束点等。在其过循环根据文件块的起始和结束位置执行文件块的下载。其功能定义如下图3.3所示:循环执行下载文件块线程下载类图3.3 系统工具类的功能3.2.4 下载任务总线程控制类的基本功能分析下载任务总线程控制类是整个程序运行的核心,其中并没有过多的逻辑定义,而是对线程类进行控制,分割文件进行下载。其功能定义如图3.4所示:获取线程数、所有线程开始点结束点分割文件并下载计算下载的大小总线程控制类对线程开始关闭控制关闭文件输出流图3.4 多线程调度类的功能3.2.5 用户界面类的基本功能分析对于一个好的应用程序来说,友好用户界面是必不可少的。体系统的用户界面由多个类组成,包括下载文件属性面板类、添加下载任务对话框、按钮工具条类等。其功能如图3.5:下载文件属性面板类界面类添加下载任务对话框类应用程序主窗口类主窗口中按钮工具条类图3.5 用户界面功能3.3 系统流程及模块划分 根据上面的需求分析,可以将系统分为以下几个模块。n 下载任务定义模块:负责定义要下载的任务所需要的各种详细的信息。n 线程下载模块:负责定义每个线程下载的具体实现过程。n 线程控制模块:负责协调控制多个线程共同完成下载任务。n 用户界面模块:负责定义可视化的用户界面。 整个系统的执行流程如图3.6所示: 否全部线程运行结束合并临时文件生成下载文件调度多线程下载用户下载结束 是图3.6 多线程下载工具执行流程图3.4 关键技术和难点3.4.1 Java多线程技术多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,线程间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立存储空间,而是和所属进程中的其他线程共享一个存储空间,这使得线程间的通信远较进程简单16。多个线程的执行是并发的,也是在逻辑上同时,而不管是否是物理上的同时。如果系统只有一个CPU,那么真正的同时是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们只需要设想各个线程是同时执行即可。在Java中提供了类 java.lang.Thread来进行多线程编程。在基于Java的应用程序中可以通过以下两种方法创建线程对象。(1) 声明一个Thead类的子类,并覆盖其run方法。示例代码如下:class mythread extends thread public void run /* 覆盖方法 */(2) 声明一个实现Runnable接口的类,并实现run方法。示例代码如下:class mythread implements runnable public void run /* 实现该方法 */Thread类中提供了大量的方法来控制线程的执行过程。要触发一个新线程,需要调用start方法。示例代码如下:mythread t = new mytherad;t.start;在调用start方法时,将创建一个新的控制线程,新线程进入可运行状态,它将向线程调度器注册这个线程。接着它将调用run方法。每个线程都是通过某个特定Thread对象所对应的run方法来完成其操作,因为run方法中的代码定义执行线程所需要的功能,所以run方法被称为线程体。每个线程都是通过某个特定Thread对象所对应的run方法来完成其操作的,因为run方法中的代码定义执行线程所需的功能,所以run方法被称为线程体17。3.4.2 Java I/O流技术为了进行数据的输入/输出操作,Java中把不同的输入/输出源抽象表述为流stream。Java.io包中定义了多个流类型来实现输入/输出功能。按照流的方向划分,可以分为输入流和输出流。n 输入流:只能从中读取字节数据,而不能向其写入数据。n 输出流:只能向其写入字节数据,而不能从中读取数据。 按照流所处理的数据类型划分,可以分为字节流和字符流。n 节点流:可以从向一个特定的I/O设备读写数据的流,节点流也被 称为低级流。n 处理流:用来实现对一个已存在的流的连接和封装,是通过所封装的流的功能调用实现数据读/写操作的流,处理流也被称为高级流。Java.io包支持两种类型的流,包括二进制数据的字节流和包括字符数据的字符流。在读/写数据时,这两种流以不同方式工作18。当向字节流写数据时,数据以字节序列的形式写入流,与它在存中的形式一样,数据不发生任何转换。二进制数值只能被写为字节序列,4个字节构成一个int型值,8个字节构成一个long型值等。Java其部将字节符存储为16位的Unicode码字符,因此每个Unicode码字符可以写成2个字节的二进制流,先写高8位。字符流用于存储和检索文本,而且可以使用它读取由非Java程序生成的文本文件。所有二进制数据在写向字符流之前必须转换为字符流能够接受的表达形式。该形式由原始二进制数据值转换成的字符组成。因此,从包含文本的字符流中读取数据比直接读取二进制数据涉及更多的工作19。在本系统中,由于下载文件不一定是只包含字符的文本,因此在实现过程中使用的是更加通用的字节流。在java.io包中,InputSteam和OutputStream类及它们的子类均表示字节流,并且提供了读/写二进制数据的方法。InputStream类中包含3个read方法,用来数据流中读取二进制代码。n 输入流的基本方法如下:read,这个方法在InputStream类中是抽象的,因此它必须定义在子类中。此方法以int型返回流的下一个可读字节。如果到达流的末尾,则方法的返回值为-1.如果I/O发生错误,将抛出IOException类型的异常。read,此方法将流中字节读到数组的连续元素中,读出的字节数量最大为array.length的值。在读取完输入数据或是检测到流尾时,才从本方法返回。本方法将返回读取的字节个数,或者如果因为到达流尾而没有读取任何字节则返回-1.如果I/O发生错误,将抛出IOEception类型异常。如果传给方法的参数为null,则抛出NullPointerException异常。read,此方法将数据读入一个字节数组,从数组的offset指定的位置开始存放,并用length来指定读取的最大字节数。n 输入流的其他方法如下:void close,关闭流。int available,返回可以从中读取的字节数。long skip,在输入流中跳过n个字节,将实际跳过的字节数返回。boolean markSupported,判断流是否支持标记功能。void mark,在支持标记的输入流的当前位置设置一个标记。void reset,返回到流的上一个标记。注意,流必须支持标记功能。OutputStream 类包含3个write方法,用来向数据流写入二进制代码。这些操作与InputStream类的read方法相对应20。n 输出流的基本方法如下:void write。void write。void write。在本系统的实现过程中主要涉及两部分Java流操作,一个是从打开的URL连接中获得网络的输入流,一个是向文件写入容的输出流。3.5 本章小结本章对项目本系统需求进行了用户需求分析和系统功能需求分析,并描述了系统流程及模块划分,而且分析了关键技术和难点,明确了系统的使用对象、大致功能结构及各个业务系统所需实现的功能等问题,为后续系统设计打下了基础。第四章 系统详细设计与实现4.1 系统基本流程该系统基本流程如图4.1所示:运行程序后,可以在主界面上输入URL地址、保存地址也可以在文件菜单中新建一个任务,然后在URL地址栏中输入地址,用户可以选择需要下载的线程数,程序还提供下载弹出窗体保存位置的选择,而且每当新建一个新的任务时,程序会自动载入默认的存储位置,不需要用户反复的输入地址。点击确定时,程序将在主界面显示刚刚新建的下载任务,包括了详细的信息。图4.1系统基本流程图新建完任务后,用户还可以继续添加下载的任务。选中想要下载的任务,可以多选,点击开始按钮,程序将开始任务的下载,当第一次运行程序时,程序将在程序的当前目录下自动新建一个配置文件,该文件名为globalGet.init,该配置文件将记录该程序的默认下载地址和所有上一次的任务下载信息。所以每当用户退出程序时,程序都会自动保存当前的所有任务下载信息,做到断点续传的可视化。当开始一个新的任务下载时,该程序也将自动创建一个新的保存任务下载信息的文件,该文件用户记录该文件的下载点,也就是实现断点续传的保存信息,文件名以下载的文件名加上.tmp命名,当该文件下载完成时,程序会自动删除该记录文件。用户单击删除任务按钮可以删除选中的任务,可以多选。单击新建按钮,将可以新曾下载的任务。4.2 系统功能模块设计本系统分为五个功能模块,分别为下载任务实体类模块、系统工具类模块、线程下载类模块、下载任务总控制模块、用户界面模块。每个模块的功能在上一章的系统功能需求分析已经详细介绍过,这里不再重述。4.2.1 系统下载功能的实现按照功能划分,下载过程可以分为两部分,即建立连接并读取待下载文件的信息、下载文件。由于论文的篇幅有限,涉及到代码只贴了重点部分。 建立连接并获取下载信息public static TestResult TestURL TestResult r = new TestResult;URL tmp_URL;try System.out.println;tmp_URL = new URL;/ 建立连接URLConnection = tmp_URL.openConnection;if .getResponseCode = 400 System.out.println;r.myUrl = null;r.myResult = -1;return r; else System.out.println;r.myUrl = tmp_URL;r.myResult = 1;/ 获取文件长度r.fileLength = .getContentLength;if System.out.println; else System.out.println资源 + tmp + 文件大小为Math.round / 100.0+ k。;/ 获取文件名r.fileName = getFileName;System.out.println;/ 获取MIME列表r._MIME = getMIME;return r; catch System.out.println;r.myUrl = null;r.myResult = -2;return r; catch System.out.println;r.myUrl = null;r.myResult = -3;return r;它的作用是从下载URL地址中文件名和文件长度。功能的实现是通过URLConnection 类来完成的。URLConnection实例都可用于生成单个请求,再通过实例调用getFileName方法和getContent
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!