Linux下实现断点续传的原理介绍
2024-06-22 14:54:37阅读量:1612 字体:大 中 小
断点续传是一种结合本地存储和网络存储的技术,主要用来解决网络失效时的视频丢失问题。DVS通常本身没有视频存储功能,而是必须由后端的NVR来实现视频的存储,因此对于网络稳定性要求很高,网络连接失败、丢包严重、抖动等各种因素都可能造成视频数据的丢失。断点续传支持从文件上次中断的地方开始传送数据,而并非是从文件开头传送。这就是断点续传的定义。系统都默认可以断点续传,但我们很少知道他的原理,下面就来看看小编的介绍吧。

断点续传的原理
其实断点续传的原理很简单,就是在 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下实现断点续传的原理介绍》版权归原作者所有,内容不代表本站立场!
如本文内容影响到您的合法权益(含文章中内容、图片等),请及时联系本站,我们会及时删除处理。
推荐阅读

qq音乐删除访问记录别人能看见吗
qq音乐删除了访问记录别人是不能看到的,可以在访客功能中删除访问记录,通过以下步骤删除qq音乐访问记录: qq音乐删除访问记录别人能看见吗 1、打开qq音乐,切换到个人中心,点击头像”进入...
阅读: 681

新加好友怎么才能分享屏幕
qq聊天中自带有分享屏幕的功能,只要加了好友,直接点击分享屏幕就可以将屏幕分享给对方。具体操作方法如下: 新加好友怎么才能分享屏幕 1.在qq中找到要分享屏幕的好友,点击进入对话界面。 2.点击对话...
阅读: 757

手机锁屏微信语音视频没有提示声音
手机锁屏微信语音视频没有提示声音可能是关闭了,接收语音和视频通话邀请提醒,如果关闭了就不会有提醒,可以通过设置重新开启这个功能,具体操作步骤如下: 手机锁屏微信语音视频没有提示声音 1、打开微信app...
阅读: 757

荣耀60声音小怎么办
如果荣耀60手机的声音比较小的话,可以去系统内进行相应的调整,把手机的声音调大,具体的操作步骤如下: 荣耀60声音小怎么办 1、打开手机的设置,点击声音和振动”按钮,进入声音和振动的设置页...
阅读: 841

ipad pro怎么录屏
ipad pro设备有录屏的功能,有需要的用户可以去手机的控制中心内打开按键进行录屏,具体的操作步骤如下: ipad pro怎么录屏 1、进入手机的桌面中,从手机屏幕的右上角往下滑,呼出控制中心的界面...
阅读: 889

苹果平板如何隐藏app软件
苹果平板没有隐藏app软件的功能,但是可以把app下载到资源库中,这样就不会显示在平板的桌面上,操作方法如下: 苹果平板如何隐藏app软件 1、打开平板的设置,点击主屏幕”按钮,进入主屏幕...
阅读: 735
热门文章
1.快手聚星怎么开通
- 1

- 快手聚星怎么开通
- 2022-12-27
- 1
2.剪映贴纸怎么跟着遮挡部位走
- 2

- 剪映贴纸怎么跟着遮挡部位走
- 2022-12-27
- 2
3.没有京东白条怎么分期买手机
- 3

- 没有京东白条怎么分期买手机
- 2022-12-27
- 3
4.换新手机微信登录不上去怎么办
- 4

- 换新手机微信登录不上去怎么办
- 2022-12-27
- 4
5.超级QQ秀怎么删掉
- 5

- 超级QQ秀怎么删掉
- 2022-12-28
- 5
6.qq小屋从哪里进
- 6

- qq小屋从哪里进
- 2022-12-28
- 6
7.怎么知道对方关闭了活跃状态
- 7

- 怎么知道对方关闭了活跃状态
- 2022-12-28
- 7
8.上海公交车微信扫码支付步骤
- 8

- 上海公交车微信扫码支付步骤
- 2022-12-28
- 8
9.支付宝怎么设置花呗收款开关
- 9

- 支付宝怎么设置花呗收款开关
- 2022-12-28
- 9
10.剪映怎么局部变色
- 10

- 剪映怎么局部变色
- 2022-12-28
- 10
最近更新

酷狗音乐中使用蝰蛇音效制作工具的具体操作方法
2024-11-11

win7电脑中出现声音图标不见了的具体解决方法
2024-11-11

车到哪app的详细软件介绍
2024-11-11

小米9se中查看序列号的具体操作方法
2024-11-11

迅雷中使用FTP探测器的详细操作方法
2024-11-11

ppt制作出小荷才露尖尖角动画场景的具体操作步骤
2024-11-11
