快速业务通道

Java网络编程从入门到精通(24):实现HTTP断点续传下载工具 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
    de.percent(m * 100 / fileSize); 047          } 048      } 049      fileOut.close(); 050      socket.close(); 051  }

Java网络编程从入门到精通(24):实现HTTP断点续传下载工具(6)

时间:2011-01-12

download方法是断点续传工具的核心方法。它有四个参数:

1.DownloadEvent de

用于处理下载事件的接口。

2.String url 

要下载文件的URL。

3.String localFN

要保存的本地文件名,可以用这个文件的大小来确定已经下载了多少个字节。

4.int cacheSize

下载数据的缓冲区。也就是一次从服务器下载多个字节。这个值不宜太小,因为,频繁地从服务器下载数据,会降低网络的利用率。一般可以将这个值设为8192(8K)。

为了分析下载文件的url ,在008行使用了URL类,这个类在以后还会介绍,在这里只要知道使用这个类可以将使用各种协议的url (包括HTTP和FTP协议)的各个部分分解,以便单独使用其中的一部分。

第029行:根据文件的实际大小和已经下载的字节数(finishedSize)来判断是否文件是否已经下载完成。当文件的实际大小无法确定时,也就是fileSize返回-1时,不能下载。

第033行:如果文件已经下载了一部分,并且返回的状态码仍是200(应该是206),则表明服务器并不支持断点续传。当然,这可以根据另一个字段Accept-Ranges来判断。

第036行:由于本程序未考虑重定向(状态码是3xx)的情况,因此,在使用download时,不要下载返回3xx状态码的Web资源。

第040 ~ 048行:开始下载文件。第046行调用DownloadEvent的percent方法来返回下载进度。

001  package download; 002   003  import java.io.*; 004   005  class NewProgress implements DownloadEvent 006  { 007      private long oldPercent = -1; 008      public void percent(long n) 009      { 010          if (n > oldPercent) 011          { 012              System.out.print("[" + String.valueOf(n) + "%]"); 013              oldPercent = n; 014          } 015      } 016      public void state(String s) 017      { 018          System.out.println(s); 019      } 020      public void viewHttpHeaders(String s) 021      { 022          System.out.println(s); 023      } 024  } 025 026  public class Main 027  { 028      public static void main(String[] args) throws Exception 029      { 030           031          DownloadEvent progress = new NewProgress(); 032          if (args.length < 1) 033          { 034              System.out.println("用法:java class 下载文件名"); 035              return; 036          } 037          FileInputStream fis = new FileInputStream(args[0]); 038          BufferedReader fileReader = new BufferedReader(new InputStreamReader( 039                          fis)); 040          String s = ""; 041          String[] ss; 042          while ((s = fileReader.readLine()) != null ) 043          { 044         

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号