windows | Mac os | linux | 电脑故障 | 网络知识 | 电脑百科 | 破解软件 | 网页编程 | 电脑配置 |

Linux下怎么实现断点续传

当要传送的文件较大,过程中如果网络中断了,就比较悲剧了。那么Linux下怎么实现断点续传呢?小编分享了Linux下实现断点续传的方法,希望对大家有所帮助。

Linux下实现断点续传方法

Linux下怎么实现断点续传

断点续传的原理

其实断点续传的原理很简单,就是在 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);

}

以上就是断点续传的原理,知道这些原理,相信大家都能够进行编程了吧

看过“Linux下怎么实现断点续传”的人还看了:

123
  • Linux下怎么实现断点续传 相关内容:
  • Linux怎么使用sort排序命令
  • sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。-(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o 标志指定输出...

  • 排序命令sort使用实例介绍
  • sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。小编为大家分享了排序命令sort使用实...

  • linux系统命令及其使用详解
  • 如果你的英文足够好,那完全可以不靠任何人就精通linux,这里小编为大家分享下linux系统命令及其使用详解,希望大家喜欢。linux系统命令及其使用详解cat cdchmod chowncp cut名称:cat使用权限:所有使用者使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串...

  • Linux服务器监控工具
  • 有许多非常好的服务器监控解决方案,而为了省去你寻找方案的麻烦,这里小编为你列出了我能找到的最好的服务器监控工具。Linux服务器监控工具1.找出瓶颈2.硬盘(存储)瓶颈3.CPU及内存瓶颈4.网络瓶颈#1: top - 进程活动top提供一个当前运行系统实时动态的视图,也就是正在运行进...

  • linux操作系统监控工具
  • 监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。这里小编就与大家谈谈Linux操作票撒谎那个面都有一些什么样的系统监控工具。linux操作系统监控...

  • linux系统监控工具
  • 通过系统监控可以了解系统的运行状态、及时发现异常、分析原因、提早解决,避免系统故障,确保用户对系统的感知度和满意度。IPTV系统一般是通过告警管理、日志管理、信令跟踪、探针、诊断测试来实现对系统的监控。小编为大家分享了linux系统监控工具,下面大家跟着小编一起来...

  • Linux系统管理命令大全
  • linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。小编为大家分享了Linux系统管理命令,下面大家跟着小编一起来了解一下吧。Linux...

  • 怎么把Linux系统的文件拷贝到U盘
  • copy意为复制、摹本。拷贝有四种解释:①是一个计算机系统的DOS命令,意为“复制”,是一个新名词,广泛地应用于IT的各个领域,那么怎么把Linux系统的文件拷贝到U盘呢?小编为大家分享了拷贝Linux系统的文件到U盘的解决方法,下面大家跟着小编一起来了解一下吧。拷贝Linux...

  • 查看更多>>

    linux