快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
象的getOutputStream方法得到的输出流。

2.String host

下载文件所在的服务器的域名或IP。

3.String path

下载文件在服务器上的路径,也就跟在GET方法后面的部分。

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

时间:2011-01-12

4.long startPos

从文件的startPos位置开始下载。如果startPos为0,则不生成Range字段。

001  private void analyzeHttpHeader(InputStream inputStream, DownloadEvent de)
002        throws Exception
003  {
004      String s = "";
005      byte b = -1;
006      while (true)
007      {
008          b = (byte) inputStream.read();
009          if (b == ''\r'')
010          {
011              b = (byte) inputStream.read();
012              if (b == ''\n'')
013              {
014                  if (s.equals(""))
015                      break;
016                  de.viewHttpHeaders(s);
017                  addHeaderToMap(s);
018                  s = "";
019              }
020          }
021          else
022              s += (char) b;
023      }
024  }
025
026  private void analyzeFirstLine(String s)
027  {
028      String[] ss = s.split("[ ]+");
029      if (ss.length > 1)
030          stateCode = ss[1];
031  }
032  private void addHeaderToMap(String s)
033  {
034      int index = s.indexOf(":");
035      if (index > 0)
036          httpHeaders.put(s.substring(0, index), s.substring(index + 1) .trim());
037      else
038          analyzeFirstLine(s);
039  }

第001 ~ 024行:analyzeHttpHeader方法的实现。这个方法有两个参数。其中inputStream是用Socket对象的getInputStream方法得到的输入流。这个方法是直接使用字节流来分析的HTTP响应头(主要是因为下载的文件不一定是文本文件;因此,都统一使用字节流来分析和下载),每两个""r"n"之间的就是一个字段和字段值对。在016行调用了DownloadEvent接口的viewHttpHeaders事件方法来枚举每一个响应头字段。

第026 ~ 031行:analyzeFirstLine方法的实现。这个方法的功能是分析响应消息头的第一行,并从中得到状态码后,将其保存在stateCode变量中。这个方法的参数s就是响应消息头的第一行。

第032 ~ 039行:addHeaderToMap方法的实现。这个方法的功能是将每一个响应请求消息字段和字段值加到在HttpDownload类中定义的httpHeaders哈希映射中。在第034行查找每一行消息头是否包含":",如果包含":",这一行必是消息头的第一行。因此,在第038行调用了analyzeFirstLine方法从第一行得到响应状态码。

001  private String getHeader(String header) 002  { 003      return (String) httpHeaders.get(header); 004  } 005  private int getIntHeader(String header) 006  { 007      return Integer.parseInt(getHeader(header)); 008  }

Java利大園殻貫秘壇欺娼宥?24??糞?HTTP僅泣偬勧和墮垢醤(5)

扮寂:2011-01-12

宸曾倖圭隈繍氏壓getFileSize才download嶄瓜距喘。万断議孔嬬頁貫?哘?連嶄功象忖粁忖誼欺?哘議忖粁峙。getHeader誼欺忖憲堪侘塀議忖粁峙?遇getIntHeader誼欺屁方侏議忖粁峙。

001  public long getFileSize() 002  { 003      long length = -1; 004      try 005      { 006          length = getIntHeader

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号