【Java技术】基于Http的文件断点续传实现

本文介绍了Java基于Http实现文件断点续传的原理和步骤,包括环境要求、RandomAccessFile类的使用、基本实现思路和代码实现。核心思想是利用RandomAccessFile拆分文件并结合多线程进行读写,最后合并成完整文件。
摘要由CSDN通过智能技术生成

1.断点续传的介绍

客户端软件断点续传指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载。从而达到让用户节省时间,提高速度的目的。
  
2.断点续传的环境要求

(1). 如果是基于http请求与响应实现的断点续传,需要服务器支持"响应一部分"数据的功能;(本案例采用的是tomcat7服务器,而tomcat7服务器是支持这个功能的)
  
(2). 在客户端需要使用RandomAccessFile类对文件任意位置的数据进行随机读写操作;

3.java的RandomAccessFile类介绍

java的API中对RandomAccessFile类的解释如下:
在这里插入图片描述
我对RandomAccessFile类的理解是:RandomAccessFile类是java提供的一个可以用于随机读写文件内容的类,我们可以对RandomAccessFile类关联的文件中的任意位置和任意大小的数据进行任意的读写操作;因此要想完成文件的断点续传操作,该类的使用是必不可少的!

4.断点续传的基本实现思路
在这里插入图片描述

5.断点续传的代码实现

基础环境搭建:
  
(1). 创建WEB的maven工程;

(2). 引入maven的tomcat7插件;

(3). 在webapp目录下存放多个文件,以备测试断点续传下载使用;
  java客户端代码实现:

public class MyDownLoadClient {
   
    public static String urlpath = "http://127.0.0.1:80/";
    private static int threadCount = 5;

    public static void main(String[] args) throws Exception {
   
        // 让用户输入要下载的文件名称
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要下载的文件名称:");
        String file = sc.next();
        urlpath = urlpath.concat(file);
        // 获取文件总大小
        URL url = new URL(urlpath);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setConnectTimeout(2000);
        int responseCode = conn.getResponseCode();
        if (responseCode == 200) {
   
            int contentLength = conn.getContentLength();
            System.out.println("length" + contentLength);
            int part = contentLength / threadCount;
            // 读配置文件
            ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
            CountDownLatch count;
            InputStream in = MyDownLoadClient.class.getClassLoader().getResourceAsStream(file + ".properties");
            if (in != null) {
   
                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值