`
jessen163
  • 浏览: 464760 次
  • 性别: Icon_minigender_1
  • 来自: 潘多拉
社区版块
存档分类
最新评论

JAVA编程技巧之如何实现HTTP的断点续传

    博客分类:
  • Util
阅读更多
(一)断点续传的原理

其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:

假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。

GET /down.zip HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-

excel, application/msword, application/vnd.ms-powerpoint, */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

Connection: Keep-Alive

服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:

200

Content-Length=106786028

Accept-Ranges=bytes

Date=Mon, 30 Apr 2001 12:56:11 GMT

ETag=W/"02ca57e173c11:95b"

Content-Type=application/octet-stream

Server=Microsoft-IIS/5.0

Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT

所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给

Web服务器的时候要多加一条信息--从哪里开始。

下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。

GET /down.zip HTTP/1.0

User-Agent: NetFox

RANGE: bytes=2000070-

Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

仔细看一下就会发现多了一行RANGE: bytes=2000070-;这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。

服务器收到这个请求以后,返回的信息如下:

206

Content-Length=106786028

Content-Range=bytes 2000070-106786027/106786028

Date=Mon, 30 Apr 2001 12:55:20 GMT

ETag=W/"02ca57e173c11:95b"

Content-Type=application/octet-stream

Server=Microsoft-IIS/5.0

Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT

和前面服务器返回的信息比较一下,就会发现增加了一行:

Content-Range=bytes 2000070-106786027/106786028

返回的代码也改为206了,而不再是200了。

知道了以上原理,就可以进行断点续传的编程了。


(二)Java实现断点续传的关键几点

(1)用什么方法实现提交RANGE: bytes=2000070-。

当然用最原始的Socket是肯定能完成的,不过那样太费事了,其实Java的net包中提供了这种功能。代码如下:

URL url = new URL(" http://www.sjtu.edu.cn/down.zip";;);

HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection();

//设置User-Agent

httpConnection.setRequestProperty("User-Agent","NetFox");

//设置断点续传的开始位置

httpConnection.setRequestProperty("RANGE","bytes=2000070");

//获得输入流

InputStream input = httpConnection.getInputStream();

从输入流中取出的字节流就是down.zip文件从2000070开始的字节流。大家看,其实断点续传用Java实现起来还是很简单的吧。接下来要做的事就是怎么保存获得的流到文件中去了。

保存文件采用的方法

采用IO包中的RandAccessFile类。

操作相当简单,假设从2000070处开始保存文件,代码如下:


RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 2000070;
//定位文件指针到nPos位置
oSavedFile.seek(nPos);
byte[] b = new byte[1024];
int nRead;
//从输入流中读入字节流,然后写到文件中
while((nRead=input.read(b,0,1024)) > 0)
{
 oSavedFile.write(b,0,nRead);
}
分享到:
评论

相关推荐

    用Java实现断点续传.txt

    ### 用Java实现断点续传的...综上所述,断点续传功能的实现不仅涉及到HTTP协议的理解和应用,还需要深入掌握Java语言的网络编程技术和文件操作技巧。此外,为了提升用户体验,还需要考虑更多的细节问题和技术优化手段。

    fileupload实现断点续传,大家看看

    本文将深入探讨断点续传的原理、实现方式以及相关的编程技巧。 1. 断点续传的基本原理 断点续传的核心在于保存和恢复上传进度。在上传过程中,服务器和客户端会记录当前的传输状态,如已上传的字节数、文件的总大小...

    支持断点续传(http)

    ### 支持断点续传(HTTP...总之,Java 实现断点续传的过程涉及到了 HTTP 协议的理解、网络编程技巧以及文件操作等多个方面。通过本文介绍的方法和技术,可以有效地解决大文件下载过程中可能出现的问题,提高用户体验。

    多线程断点续传实践学习资料

    总之,这个学习资料是一份宝贵的资源,涵盖了多线程、网络I/O、文件操作等多个Java编程的关键领域,特别适合希望提升网络编程能力或对断点续传感兴趣的开发者。通过深入学习和实践,你将能够创建自己的高效、可靠的...

    Java多线程与线程安全实践-基于Http协议的断点续传

    在Java编程中,多线程和线程安全是核心概念,尤其在开发高效并发应用程序时。本实践将探讨如何利用Java实现基于HTTP协议的断点续传功能,这在大文件下载、网络传输等场景中非常有用。我们将深入理解线程的概念、线程...

    应用源码平台下通过HTTP协议实现断点续传下载.zip

    本资料包提供了关于如何在应用源码平台上通过HTTP协议实现断点续传下载的示例代码,对于学习Android和Java编程,尤其是进行毕业设计或代码学习的学生来说,是一份宝贵的资源。 首先,我们需要理解HTTP协议的基础。...

    java 段点续传 例子

    在提供的压缩包中,`[网络] 用Java实现断点续传(HTTP) (zz)--青苹果.mht`可能是一个包含具体实现的MHT(单一文件网页)文档,`FTPTransfer-code.rar`可能包含FTP断点续传的代码示例,而`10102631756.rar`和`...

    基于Java的多线程与线程安全实践+基于Http协议的断点续传+jar包

    总结,这个资源包涵盖了Java多线程编程的基础和实践,以及在网络通信中实现断点续传的技巧,对于想要提升并发处理能力以及网络编程技能的开发者来说,是非常有价值的参考资料。通过学习和实践,开发者可以更好地理解...

    基于JAVA毕业设计-JAVA多线程与线程安全实践-基于Http协议的断点续传.rar

    Java多线程与线程安全在实际开发中扮演着至关重要的角色,特别是在网络协议的实现,如HTTP协议的断点续传功能上。这个毕业设计项目深入探讨了这两个主题,并结合了网络编程的知识,旨在提升开发者对并发处理和高效...

    Java多线程与线程安全实践-基于Http协议的断点续传.rar

    该项目旨在通过实现一个基于HTTP协议的文件断点续传功能,深入探索和实践Java多线程编程以及线程安全的关键技术。在这个项目中,开发者将学习如何利用Java的并发工具如Thread类和Runnable接口来创建和管理多个线程,...

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    本实践项目“Java多线程与线程安全实践——基于Http协议的断点续传”深入探讨了如何利用多线程技术实现HTTP协议下的断点续传功能,这通常在大文件下载场景中应用。 首先,多线程允许程序同时执行多个任务,提高了...

    Http多线程下载与断点续传分析

    在提供的文件列表中,"Jloading"可能是一个Java加载库或者示例代码,用于帮助开发者实现上述的多线程下载和断点续传功能。通过研究这个库,我们可以进一步掌握相关技术和实践技巧。 总之,Http多线程下载和断点续传...

    Java编程小技巧集锦.txt

    ### Java编程小技巧集锦:深入理解与应用 #### Javadoc文档注释的高级使用技巧 Javadoc是一种用于自动生成Java源代码文档的工具,它能够将程序员在代码中的注释转换成HTML格式的文档,使得Java API文档更加清晰、...

    安卓Andriod源码——多线程断点续传下载+在线播放音乐.zip

    在Android平台上,开发一款应用需要处理许多复杂的任务,如数据加载、用户交互和多媒体处理等。...通过研究这些代码,你可以了解到如何在实际项目中应用多线程、断点续传、在线播放等技术,从而提升自己的编程技能。

    JAVA编程的FTP客户端库选择技巧.pdf

    不同的FTP客户端库提供的文件传输功能不同,例如一些库提供了断点续传、文件断点续传等功能。 3. 安全性功能 安全性功能是FTP客户端库的重要方面之一,FTP客户端库需要提供基于SSL/TLS的加密传输功能,以确保数据...

    vc和java编程小技巧锦集

    2. **Java编程技巧**: - **集合框架**:理解ArrayList、LinkedList、HashSet、HashMap等数据结构的特性和适用场景,能有效优化代码性能。 - **多线程**:使用synchronized关键字和并发工具类如Semaphore、...

    多线程下载(支持断点)

    在IT领域,多线程下载是一项重要的技术,尤其在处理大文件下载时,它能显著提高下载效率并提供更好的用户体验。...通过研究和实践这些源码,开发者不仅可以掌握相关的编程技巧,还能了解如何在实际项目中优化下载体验。

    Java网络编程-Socket-文件传输小案例

    9. **断点续传**:在实际应用中,文件传输可能需要支持断点续传功能,即在传输中断后可以从上次断开的位置继续传输。这需要服务器和客户端保存并交换已传输的数据状态。 10. **安全性**:对于敏感的文件传输,可以...

    JAVA网络编程经典视频教程 附带源码

    2. **文件传输**:使用Java网络编程实现文件的上传和下载,涉及大块数据的分块传输和断点续传。 3. **Web服务器模拟**:创建一个微型的HTTP服务器,处理GET和POST请求,返回静态或动态内容。 4. **网络爬虫**:...

Global site tag (gtag.js) - Google Analytics