<dl id='4mc2a'></dl>

  1. <tr id='4mc2a'><strong id='4mc2a'></strong><small id='4mc2a'></small><button id='4mc2a'></button><li id='4mc2a'><noscript id='4mc2a'><big id='4mc2a'></big><dt id='4mc2a'></dt></noscript></li></tr><ol id='4mc2a'><table id='4mc2a'><blockquote id='4mc2a'><tbody id='4mc2a'></tbody></blockquote></table></ol><u id='4mc2a'></u><kbd id='4mc2a'><kbd id='4mc2a'></kbd></kbd>
  2. <span id='4mc2a'></span>

    <code id='4mc2a'><strong id='4mc2a'></strong></code>
    <ins id='4mc2a'></ins>

      1. <acronym id='4mc2a'><em id='4mc2a'></em><td id='4mc2a'><div id='4mc2a'></div></td></acronym><address id='4mc2a'><big id='4mc2a'><big id='4mc2a'></big><legend id='4mc2a'></legend></big></address>

          <i id='4mc2a'><div id='4mc2a'><ins id='4mc2a'></ins></div></i>

          <fieldset id='4mc2a'></fieldset>
          <i id='4mc2a'></i>
        1. Linux下实现断点续传的原理介绍

          • 时间:
          • 浏览:7
          • 来源:124软件资讯网

              断点续传是一种联合当地存储和网络存储的手艺  ,主要用来解决网络失效时的视频丢失问题 。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  , **; 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);

              }

              以上就是断点续传的原理  ,知道这些原理  ,信赖各人都能够举行编程了吧  ,这个手艺在现在的电脑手艺上也算不得什么  ,打家应该都注重到我们下载时都是断点续传吧