`
gaoyuntao2005
  • 浏览: 311238 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA断点续传(B/S)(2)

阅读更多
/*
 **FileSplitterFetch.java
 */
package NetFox;

import java.io.*;
import java.net.*;

public class FileSplitterFetch extends Thread {
    String sURL; // File URL

    long nStartPos; // File Snippet Start Position

    long nEndPos; // File Snippet End Position

    int nThreadID; // Thread's ID

    boolean bDownOver = false; // Downing is over

    boolean bStop = false; // Stop identical

    FileAccess FileAccess = null; // File Access interface

    public FileSplitterFetch(String sURL, String sName, long nStart, long nEnd,
            int id) throws IOException {
        this.sURL = sURL;
        this.nStartPos = nStart;
        this.nEndPos = nEnd;
        nThreadID = id;
        FileAccess = new FileAccess(sName, nStartPos);
    }

    public void run() {
        while (nStartPos < nEndPos && !bStop) {
            try {
                URL url = new URL(sURL);
                HttpURLConnection httpConnection = (HttpURLConnection) url
                        .openConnection();
                httpConnection.setRequestProperty("User-Agent", "NetFox");
                String sProperty = "bytes=" + nStartPos + "-";
                httpConnection.setRequestProperty("RANGE", sProperty);
                Utility.log(sProperty);
                InputStream input = httpConnection.getInputStream();
                // logResponseHead(httpConnection);
                byte[] b = new byte[1024];
                int nRead;
                while ((nRead = input.read(b, 0, 1024)) > 0
                        && nStartPos < nEndPos && !bStop) {
                    nStartPos += FileAccess.write(b, 0, nRead);
                    // if(nThreadID == 1)
                    // Utility.log("nStartPos = " + nStartPos + ", nEndPos = " +
                    // nEndPos);
                }
                Utility.log("Thread " + nThreadID + " is over!");
                bDownOver = true;
                // nPos = FileAccess.write (b,0,nRead);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    // 打印回应的头信息
    public void logResponseHead(HttpURLConnection con) {
        for (int i = 1;; i++) {
            String header = con.getHeaderFieldKey(i);
            if (header != null)
                // responseHeaders.put(header,httpConnection.getHeaderField(header));
                Utility.log(header + " : " + con.getHeaderField(header));
            else
                break;
        }
    }

    public void splitterStop() {
        bStop = true;
    }
}

 

/*
 **FileAccess.java
 */
package NetFox;

import java.io.*;

public class FileAccess implements Serializable {

    private static final long serialVersionUID = 1L;

    RandomAccessFile oSavedFile;

    long nPos;

    public FileAccess() throws IOException {
        this("", 0);
    }

    public FileAccess(String sName, long nPos) throws IOException {
        oSavedFile = new RandomAccessFile(sName, "rw");
        this.nPos = nPos;
        oSavedFile.seek(nPos);
    }

    public synchronized int write(byte[] b, int nStart, int nLen) {
        int n = -1;
        try {
            oSavedFile.write(b, nStart, nLen);
            n = nLen;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return n;
    }
}

 

分享到:
评论

相关推荐

    B/S网盘系统

    6. **性能优化**:由于文件操作可能涉及大量数据,因此系统需要进行性能优化,例如使用分块上传、断点续传、多线程下载等技术,提高用户体验。 7. **分布式设计**:大型的B/S网盘系统往往采用分布式设计,包括...

    java swing开发B站视频下载工具,BiliBili视频下载工具,超好用的B站视频下载工具.zip

    支持断点续传下载 支持CC字幕下载 支持互动视频下载 支持课程视频下载 支持相簿图片下载 开发技术 java swing,java awt 依赖包文件(可选) 链接:https://pan.baidu.com/s/18-zekCttaTwVY52_gA3btg?pwd=oadu ...

    基于Java的下载工具的设计与实现.docx

    为了解决这一问题,提高下载效率和用户体验,本设计提出了一种基于Java语言的下载工具,支持断点续传和多线程下载等功能。 ##### 1.2 系统意义 本设计旨在开发一款高效稳定的下载工具,能够自动处理网络中断导致的...

    JAVA文件传输(论文+源代码)

    需求分析则会列出用户期望的功能,如上传、下载、断点续传等。 系统详细设计部分可能详细列出了各个模块,如用户界面、连接管理、文件处理和错误处理等。FTP协议的介绍可能解释了如何通过Java实现FTP通信,包括登录...

    java 实现下载功能源码

    10. **断点续传**:如果源码支持断点续传,它将保存当前下载的进度,当下载因某种原因中断后,可以从上次停止的地方继续下载,而不是重新开始。 在实际项目中,这样的下载工具可能还会考虑其他因素,如重试机制、...

    [计算机项目]基于java的局域网飞鸽传书系统设计与实现(源代码+项目报告).zip

    2. **系统设计**:包括总体架构设计(如C/S或B/S结构)、模块划分、数据库设计等。 3. **算法选择**:可能涉及到文件分块、传输效率优化等方面的算法,比如使用CRC校验确保文件传输的完整性。 4. **实现细节**:...

    java下载网络图片

    在Java编程中,下载网络图片是一项常见的任务,尤其在数据抓取、网页爬虫或构建图形界面应用时。本教程将深入讲解如何使用Java...在实际开发中,还可以考虑添加异常处理、进度条显示、断点续传等功能,提升用户体验。

    论文研究-异构数据库迁移的设计和实现.pdf

    实现断点续传需要记录迁移过程中的各种状态信息,例如已经迁移完成的数据量和位置,以便在继续迁移时能够准确找到续传的位置。 文章中提到的B/S模式指的是基于浏览器和服务器的网络架构模式,它允许用户通过网页...

    java基础语法选择题

    字符 `'2'` 在Java中会被视为其ASCII值(50),因此表达式 `2 + '2'` 的结果是整数类型,不能赋值给 `char` 类型变量。 - **c) `String s = "on" + 'one';`**: 正确。字符串和字符可以直接进行拼接操作。 - **d) `...

    java学习笔记1

    * Ctrl+Shift+B:在当前行设置断点或取消设置的断点。 * F11:调试最后一次执行的程序。 * Ctrl+F11:运行最后一次执行的程序。 * F5:跟踪到方法中。 * F6:单步执行程序。 * F7:执行完方法,返回到调用此...

    JAVA上百实例源码以及开源项目源代码

    Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...

    基于Java的网盘系统的设计与实现.pdf

    本文主要介绍了如何利用Java技术栈构建一个基于B/S架构的网盘系统,旨在提供一个方便用户管理、存储个人文件以及分享文件的平台。主要涉及的技术包括WebUploader、SpringBoot和FastDFS。 1. **需求分析** - **...

    课程设计-基于Java web ssh框架的QQ号管理系统(源码+数据库).zip

    腾讯QQ支持在线聊天、视频电话、点对点断点续传文件、共享文件、网络硬盘、自定义面板、QQ邮箱等多种功能,并可与移动通讯终端等多种通讯方式相连。1999年2月,腾讯正式推出第一个即时通信软件——“腾讯QQ”,QQ...

    java开发快捷键文档

    2. **Ctrl + Shift + B**:启用/禁用断点。 ### 源代码 1. **Ctrl + Shift + U**:切换大小写。 2. **Alt + Shift + S**:源代码菜单,包含抽取方法、内联方法等重构操作。 ### 运行 1. **Ctrl + F11**:运行...

    Eclipse 快捷键 很适合打印啊 Java

    12. **调试**:F5、F6、F7分别用于单步进入、单步跳过和单步返回,F8继续执行,Ctrl+Shift+B添加/移除断点,Ctrl+D显示调试视图,Ctrl+F11运行上次启动,Ctrl+R运行到行,Ctrl+U执行。 13. **重构**:Alt+Shift+Z...

    基于Android平台的无线医疗设备手机端软件Android远程医疗系统毕业论文.doc

    在系统中心处理部分,提到了数据采集和存储服务器模块,以及大文件断点续传的功能。此外,还讨论了系统管理软件的设计,如采用Java Web应用、B/S架构、MVC模型,并利用Tomcat服务器进行部署。 在系统调试阶段,论文...

    Java常用快捷键。绝对常用。个人总结。

    在编程世界中,Java是一种广泛使用的面向对象的编程语言,而高效的编码往往离不开熟练的键盘操作,这就是快捷键的重要性所在。本篇文章将聚焦于Java开发中常用的Eclipse集成开发环境(IDE)的快捷键,这些快捷键能...

    计算机毕业论文选题.docx

    - 这些系统通常基于B/S结构,采用Java、JSP等技术开发。 - 关键点包括用户认证、事务处理、数据安全及用户体验设计。 以上是部分选题中涉及的关键知识点,实际开发中还需要结合具体需求和技术趋势进行深入研究和...

    Java中的快捷键大全

    ### Java中的快捷键大全:提升开发效率的关键技巧 在Java编程的世界里,掌握快捷键能够极大地提高工作效率,减少鼠标操作,让代码编写更加流畅。本文将深入解析一系列Java开发环境中常用的快捷键,涵盖代码提示、...

Global site tag (gtag.js) - Google Analytics