文档库 最新最全的文档下载
当前位置:文档库 › 【原创】基于HTTP协议的断点续传应用系统开发毕业论文设计说明书40论文41

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

本科毕业设计说明书(论文)题目:基于HTTP协议的断点续传应用系统开发

毕业设计(论文)原创性声明和使用授权说明

原创性声明

本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。

作者签名:日期:

指导教师签名:日期:

使用授权说明

本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。

作者签名:日期:

基于HTTP协议的断点续传应用系统开发

摘要

文件的上传下载是计算机网络核心应用之一。计算网络的发展围绕在怎样使得文件上传下载更快、更好、更安全。当今的网络时代,下载软件是使用最频繁的软件之一,而网络的不稳定常常造成数据传输的不稳定,为了获得可靠、高效的数据传输,断点续传技术应运而生。

本系统开发基于HTTP协议,具有断点续传、多线程下载功能,这些功能的实现大大减少资源的浪费,节省用户下载的时间。本系统的开发用到了多线程技术、网络编程、IO流技术和Swing用户界面编程,涉及到J2SE中一些基本技术,达到了综合运用所学过的Java知识的目的。

本文对系统的需求分析、关键技术和难点进行了的详细描述,同时又详细介绍本系统的设计与实现。

关键词:断点续传,多线程,下载,problem that is caused by network instability is quite unstable. In order to obtain reliable and efficient data transfer, TDCBP technology turns out.

Based on the Http protocol, the system implements technology for downloading continuously from break points (TDCBP). It is also dependent on multi-threads programming, which greatly reduces resources and saves

downloading time. During development of system, it utilizes a multi-threading, network programming, IO 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 implementation of this system.

Key Words: tdcbp, multithreading, download, Programming Interface,API)组成。Java API 是一个大型的现成软件组件(类)集合,它可以简化applet 和应用程序的开发和部署,包括健壮、安全且可互操作的企业应用程序。它涵盖从基本对象到连网和安全性,再到XML 生成和Web 服务的所有东西。Java API 组织成相关类和接口的库;库也称为包(package)。

除了Java API 之外,每个完整的Java 平台实现还包含:

?用来编译、运行、监视、调试应用程序以及建立应用程序文档的开发工具。

?用来部署应用程序的标准机制。

?用来创建复杂的图形用户界面(GUI)的用户界面工具包。

?用来启用数据库访问和操作远程对象的集成库。

Java 技术是最初由Sun Microsystems 公司开发的。Java Community Process (JCP,一个由全世界的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 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:

(1) Java SE(Java Platform,Standard Edition)。Java SE 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java 应用程序。Java SE 包含了支持Java Web 服务开发的类,并为Java Platform,Enterprise Edition (Java EE)提供基础。大多数Java 开发人员使用Java SE 5,也称为Java 5.0 或“Tiger”(2006 年6 月,Java SE 6 或“Mustang” 发布了beta 版。)Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应用程序。

(2) Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序。Java EE 是在Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和Web 2.0 应用程序。

(3)Java ME(Java Platform,Micro Edition)。这个版本以前称为J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能[8]。本系统是基于Java SE开发。

2.1 Swing技术简介

Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 Swing的体系结构如图2.2所示

图2.2 Swing的体系结构

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类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单

(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)[9]。如图2.3所示:

图2.3 Swing组件

2.2.1Swing组件的简介

(1)MVC(Model-View-Controller)体系结构

前面我们提到,Swing胜过AWT的主要优势在于MVC体系结构的普遍使用。在一个MVC用户界面中,存在3个通信对象:模型、视图和控件。模型是指定的逻辑表示法,视图是模型的可视化表示法,而控件则指定了如何处理用户输入。当模型发生改变时,它会通知所有依赖它的视图,视图使用控件指定其相应机制。

为了简化组件的设计工作,在Swing组件中视图和控件两部分合为一体。每个组件都有一个相关的分离模型和它使用的界面(包括视图和控件)。比如,按钮JButton有一个存储其状态的分离模型ButtonModel对象。组件的模型是自动设置的,例如,一般都使用JButton而不是使用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的工厂。持久对象及集合:带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的JavaBeansPOJO,唯一特殊的是他们正与(仅仅一个)Session相关联。一旦这个Session 被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。瞬态(transient)和脱管(detached)的对象及其集合:那些目前没有与session关联的持久化类实例。他们可能是在被应用程序实例化后,尚未进行持久化的对象,也可能是因为实例化他们的Session已经被关闭而脱离持久化的对象。事务Transaction:应用程序用来指定原子操作单元范围的对象,它是单线程了,生命周期很短。Hibernate作为模型数据访问层。它通过配置文件( 2004上宣布成立一个独立的、非盈利性的基金会,由该基金会负责管理和指导Eclipse开发,目前其成员多达近百家知名公司,其中包括Borland、Rational Software、Red Hat、Sybase、Google和Oracle等业界巨头。

2.3.1Eclipse的体系结构

Eclipse平台体系结构主要由5部分组成,分别是平台运行库、工作区、工作台、团队支持和帮助。图2.4为Eclipse体系结构图。在运行时内核是整个架构的核心,其他部件都是以插件方式来实现的。Eclipse采用动态加载机制,即只有需要的才加载,这样可以降低启动时间,提高资源使用效率[11]。

2.4 为Eclipse体系结构图

工作空间插件即所谓的工作区,主要负责管理用户资源,例如用户创建项目的管理、文件变更等,并负责通知其他插件关于资源变更的信息。工作台插件是Eclipse 提供的用户界面。它使用标准窗口工具包(SWT)和一个更高级的API(JFace)构建的。SWT是Java的SwingAWT的非标准替代者,JFace则以SWT为基础,但更易于使用。团队支持插件负责提供版本控制和配置管理支持。它允许用户根据需要添加视图,并与允许用户使用的任何版本控制系统交互。帮助插件允许以HTML 文件形式添加文档,并提供了一个附加的导航结构以便用户使用帮助功能搜索相关信息[12]。

2.2 HTTP协议的简介

下载文件是电脑与WEB服务器交互的过程,它们交互的“语言”的专业名称是协议。传送文件的协议有多种,最常用的是HTTP(超文本传输协议)和FTP(文件传送协议),我采用的是HTTP。

HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。尽管TCPIP 协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息[13]。

HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。Spring的精简项

目的代码量方面做出了非常出色的工作,将大量需要重复书写的代码提取出来,进行切面编程。配置文件的灵活性也使项目的灵活性得到的加强,可以在不改变代码的情况下,而只有改变其中的配置文件实现整个系统的改变[14]。

HTTP协议最基本的命令有三条:Get、Post和Head。Get从WEB服务器请求一个特定的对象,比如HTML页面或者一个文件。WEB服务器通过一个Socket连接发送此对象作为响应,Head命令使服务器给出此对象的基本描述,比如对象的类型,大小和更新时间。Post命令用于向WEB服务器发送数据,通常使把信息发送给一个单独的应用程序。

2.3 开发环境

操作系统:Windows XP、或Windows 7视窗操作系统;

开发平台:eclipse

硬件环境建议:CPU为Intel P3 800以上,至少256M内存,10M100M自适应以太网卡,网络应与Internet连通,带宽大于512K;

最佳浏览分辨率:1024×768;

2.4 本章小结

本章以系统开发的相关理论及技术为基础,介绍系统开发过程中需要了解和掌握的理论和技术。着重介绍了JA V A、Swing技术、HTTP协议,同时明确了系统开发的总体原则。

第三章需求分析及关键技术和难点

3.1 用户需求分析

随着Internet的发展,进入信息时代后快速获得网络共享资源成为很简单的事情,人们对互联网也有了很大的依赖性。人们甚至希望只轻松点击鼠标就可以得到自己想要的东西。比如,针对一些专业的论坛提供了很多相关资料以方便人们阅读或了解;还有更多的人希望能过下载到他们喜欢听得音乐、好看的图片、喜欢的电影等等。也可以看出人们在上网时再也不单是打开浏览器来浏览网页,越来越多的人们开始使用下载软件来获取资源。同时人们也更希望使用更新更快的下载软件。由于用户下载需求的增大,也要求下载软件能够迅速完成对资源的下载。多线程程序设计可以很好的解决程序并发的问题。最恰当的比喻就是用户会感到CPU似乎同时出现在两个地方,在下载软件中应用多线程技术可以理解为将一个下载任务分成若干份来完成,其中的并发控制将使下载的效率大大提高。由于下载资源是一个过程,当中用到的时间可能会很长。那么在很长的这段时间中很有可能会出现很多的意外情况使下载中断或是停止,比如电源意外被切断、网络中断、或是操作系统故障导致系统重新启动。这些原因都会导致下载的中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来。断点续传就是用来解决这样的问题的,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。随着使用下载工具的时间的增长,用户下载的资源越来越多,因此在下载列表中的项目也越来越多,越来越混乱,因此为了便于管理和用户使用方便,用户迫切希望下载工具具有下载文件分类的功能。在下载任务的管理这一块,用户不仅希望下载工具具有下载一个一个资源的功能,而且具有批量下载有些相似的或有关联的资源的功能。还有些特殊情况下,用户在下载任务开始后由于种种原因希望放弃资源的下载,这就要求下载工具具有删除任务的功能了。为了对下载任务进行掌控,用户往往具有设置下载任务的线程数,文件下载网址,文件下载存储目录和

在下载过程中对下载任务的状态进行监控等功能需求[15]。鉴于某些软件使用初学者甚至某些电脑初学者的实际情况,他们往往需要系统有一个格外的帮助文档,使他们能够更快、更好地学会使用断点续传下载软件,提高效率。

3.2 系统功能需求分析

本节对系统下载任务实体类的功能、系统工具类的功能、线程下载类的功能分析、下载任务总线程控制类的功能、用户界面类的功能等五个功能模块进行需求分析。

3.2.1下载任务实体类的基本功能分析

对于该系统来说,就是技术断点续传的多线程下载工具,下载任务的所有信息应该被定义在一个实体类中。在下载之前,首先要知道下载任务对应的URL地址,换句通俗的话来说,就是要知道从哪里来下载文件;其次需要知道下载任务对应文件的大小,文件的大小以字节数来衡量;然后需要知道下载任务要使用几个线程,这样才能根据文件总的大小来计算出每个线程要下载的那一小段的大小;最后还需要知道下载完的文件存放的目录和存放的文件名。此外为了支持断点续传功能,在下载任务实体类中还需要定义上次文件下载长度和当前文件已下载长度。如下图3.1所示:

图3.1 下载任务实体类中定义的属性

3.2.2系统工具类的基本功能分析

系统工具类主要负责定义测试连接URL是否有效的方法以及获取要下载的资源文件名称、长度和MIME信息的方法。其功能定义如下图3.2所示:

图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 系统流程及模块划分

根据上面的需求分析,可以将系统分为以下几个模块。

?下载任务定义模块:负责定义要下载的任务所需要的各种详细的信息。

?线程下载模块:负责定义每个线程下载的具体实现过程。

?线程控制模块:负责协调控制多个线程共同完成下载任务。

?用户界面模块:负责定义可视化的用户界面。

整个系统的执行流程如图3.6所示:

下载

图3.6 多线程下载工具执行流程图

3.4 关键技术和难点

3.4.1Java多线程技术

多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,线程间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立存储空间,而是和所属进程中的其他线程共享一个存储空间,这使得线程间的通信远较进程简单[16]。

多个线程的执行是并发的,也是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们只需要设想各个线程是同时执行即可。

在Java中提供了类https://www.wendangku.net/doc/8c16133151.html,ng.Thread来进行多线程编程。在基于Java的应用程序中可以通过以下两种方法创建线程对象。

(1)声明一个Thead类的子类,并覆盖其run( )方法。

示例代码如下:

(2)声明一个实现Runnable接口的类,并实现run( )方法。

示例代码如下:

Thread类中提供了大量的方法来控制线程的执行过程。要触发一个新线程,需要调用start( )方法。

示例代码如下:

在调用start( )方法时,将创建一个新的控制线程,新线程进入可运行状态,它将向线程调度器注册这个线程。接着它将调用run( )方法。

每个线程都是通过某个特定Thread对象所对应的run( )方法来完成其操作,因为run( )方法中的代码定义执行线程所需要的功能,所以run( )方法被称为线程体。每个线程都是通过某个特定Thread对象所对应的run( )方法来完成其操作的,因为run( )方法中的代码定义执行线程所需的功能,所以run( )方法被称为线程体[17]。

3.4.2Java IO流技术

为了进行数据的输入输出操作,Java中把不同的输入输出源抽象表述为“流”(stream)。Java.io包中定义了多个流类型来实现输入输出功能。

按照流的方向划分,可以分为输入流和输出流。

?输入流:只能从中读取字节数据,而不能向其写入数据。

?输出流:只能向其写入字节数据,而不能从中读取数据。

按照流所处理的数据类型划分,可以分为字节流和字符流。

?节点流:可以从(向)一个特定的IO设备读(写)数据的流,节点流也被

称为低级流。

?处理流:用来实现对一个已存在的流的连接和封装,是通过所封装的流的

功能调用实现数据读写操作的流,处理流也被称为高级流。

Java.io包支持两种类型的流,包括二进制数据的字节流和包括字符数据的字符流。在读写数据时,这两种流以不同方式工作[18]。当向字节流写数据时,数据以字节序列的形式写入流,与它在内存中的形式一样,数据不发生任何转换。二进制数值只能被写为字节序列,4个字节构成一个int型值,8个字节构成一个long型值等。Java其内部将字节符存储为16位的Unicode码字符,因此每个Unicode码字符可以写成2个字节的二进制流,先写高8位。字符流用于存储和检索文本,而且可以使用它读取由非Java程序生成的文本文件。所有二进制数据在写向字符流之前必须转换为字符流能够接受的表达形式。该形式由原始二进制数据值转换成的字符组成。因此,从包含文本的字符流中读取数据比直接读取二进制数据涉及更多的工作[19]。

在本系统中,由于下载文件不一定是只包含字符的文本,因此在实现过程中使用的是更加通用的字节流。在java.io包中,InputSteam和OutputStream类及它们的子类均表示字节流,并且提供了读写二进制数据的方法。InputStream类中包含3个read( )方法,用来数据流中读取二进制代码。

?输入流的基本方法如下:

read( ),这个方法在InputStream类中是抽象的,因此它必须定义在子类中。此方法以int型返回流的下一个可读字节。如果到达流的末尾,则方法的返回值为-1.如果IO发生错误,将抛出IOException类型的异常。

read(byte[ ] array),此方法将流中字节读到数组的连续元素中,读出的字节数量最大为array.length的值。在读取完输入数据或是检测到流尾时,才从本方法返回。本方法将返回读取的字节个数,或者如果因为到达流尾而没有读取任何字节则返回-1.如果IO发生错误,将抛出IOEception类型异常。如果传给方法的参数为null,则抛出NullPointerException异常。

read(byte[ ] buffer,int offset,int length),此方法将数据读入一个字节数组,从数组的offset指定的位置开始存放,并用length来指定读取的最大字节数。

?输入流的其他方法如下:

void close( ),关闭流。

int available( ),返回可以从中读取的字节数。

long skip(long n),在输入流中跳过n个字节,将实际跳过的字节数返回。

boolean markSupported( ),判断流是否支持标记功能。

void mark( int readlimit),在支持标记的输入流的当前位置设置一个标记。

void reset( ),返回到流的上一个标记。注意,流必须支持标记功能。

OutputStream 类包含3个write( )方法,用来向数据流写入二进制代码。这些操作与InputStream类的read( )方法相对应[20]。

输出流的基本方法如下:

void write( int c)。

void write(byte [ ] buffer)。

void write(byte[ ] buffer, int offset, int length)。

在本系统的实现过程中主要涉及两部分Java流操作,一个是从打开的URL连接中获得网络的输入流,一个是向文件写入内容的输出流。

3.5 本章小结

本章对项目本系统需求进行了用户需求分析和系统功能需求分析,并描述了系统流程及模块划分,而且分析了关键技术和难点,明确了系统的使用对象、大致功能结构及各个业务系统所需实现的功能等问题,为后续系统设计打下了基础。

相关文档