这篇“Java怎么实现断点下载服务端与客户端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java怎么实现断点下载服务端与客户端”文章吧。首先,我们先说明了断点免费云主机域名续传的功能,实际上的原理比较简单客户端和服务端规定好一个规则,客户端传递一个参数,告知服务端需要数据从何处开始传输,服务端接收到参数进行处理,之后文件读写流从指定位置开始传输给客户端实际上,上述的参数,在http协议中已经有规范,参数名为Range
而对于服务端来说,只要处理好Range请求头参数,即可实现下载续传的功能我们来看下Range
请求头数据格式如下:格式如下:我们根据上面的格式,服务端对Range
字段进行处理(String字符串数据处理),在流中返回指定的数据大小即可那么,如何让流返回指定的数据大小或从指定位置开始传输数据呢?这里,Java提供了RandomAccessFile
类,通过seekTo()
方法,可以让我们将流设置从指定位置开始读取或写入数据这里读取和写入数据,我是采用的Java7之后新增的NIO的Channel进行流的写入(当然,用传统的文件IO流(BIO)也可以)这里,我所说的客户端是指的Android客户端,由于App开发也是基于Java,所以也是可以使用RandomAccessFile
这个类对于客户端来说,有以下逻辑:先读取本地已下载文件的大小,然后请求下载数据将文件大小的数据作为请求头的数值传到服务端,之后也是利用RandomAccessFile
移动到文件的指定位置开始写入数据即可利用上面的思路,我们还可以可以得到一个大文件快速下载的思路:如,一份文件,大小为2000B(这个大小可以通过网络请求,从返回数据的请求头content-length获取
获取)客户端拿回到文件的总大小,根据调优算法,将平分成合适的N份,通过线程池,来下载这个N个单文件在下载完毕之后,将N个文件按照顺序合并成单个文件即可上面说明了具体的思路,那么下面就是贴出服务端和客户端的代码示例服务端是采用的spring boot进行编写Android客户端,是基于Okhttp的网络框架写的,需要先引用依赖下面给出的是封装好的方法(含进度,下载失败和成功回调):使用:以上就是关于“Java怎么实现断点下载服务端与客户端”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注百云主机行业资讯频道。
相关推荐: vue中的slot-scope及scope.row怎么使用
本篇内容介绍了“vue中的slot-scope及scope.row怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!最近在写后台管理系统 在写到修改的地方时…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。