快速业务通道

Java技术体验:HTTP多线程下载,端口侦听和自启动服务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
程数   * @param referer 来源   */   public HTTPDownloader(String page, String referer, String savePath, int threadNumber) {    this.page = page;    this.savePath = savePath;    this.threadNumber = threadNumber;    this.referer = referer;   }   public String getPage() {    return page;   }   public void setPage(String page) {    this.page = page;   }   public String getSavePath() {    return savePath;   }   public void setSavePath(String savePath) {    this.savePath = savePath;   }   public int getThreadNumber() {    return threadNumber;   }   public void setThreadNumber(int threadNumber) {    this.threadNumber = threadNumber;   }   public String getReferer() {    return referer;   }   public void setReferer(String referer) {    this.referer = referer;   } } /** * 下载线程 * * @author 赵学庆 www.java2000.net */ class HTTPDownloaderThread extends Thread {   HTTPDownloader manager;   int startPos;   int endPos;   int id;   int curPos;   int BUFFER_SIZE = 4096;   int readByte = 0;   HTTPDownloaderThread(HTTPDownloader manager, int id, int startPos, int endPos) {    this.id = id;    this.manager = manager;    this.startPos = startPos;    this.endPos = endPos;   }   public void run() {    // System.out.println("线程" + id + "启动");    // 创建一个buff    BufferedInputStream bis = null;    RandomAccessFile fos = null;    // 缓冲区大小    byte[] buf = new byte[BUFFER_SIZE];    URLConnection con = null;    try {     File file = new File(manager.getSavePath());     // 创建RandomAccessFile     fos = new RandomAccessFile(file, "rw");     // 从startPos开始     fos.seek(startPos);     // 创建连接,这里会为每个线程都创建一个连接     URL url = new URL(manager.getPage());     con = url.openConnection();     con.setAllowUserInteraction(true);     curPos = startPos;     // 设置获取资源数据的范围,从startPos到endPos     con.setRequestProperty("Range", "bytes=" + startPos + "-" + endPos);     // 盗链解决     con.setRequestProperty("referer", manager.getReferer() == null ? manager.getPage() : manager.getReferer());     con.setRequestProperty("userAgent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");     // 下面一段向根据文件写入数据,curPos为当前写入的未知,这里会判断是否小于endPos,     // 如果超过endPos就代表该线程已经执行完毕     bis = new BufferedInputStream(con.getInputStream());     while (curPos < endPos) {      int len = bis.read(buf, 0, BUFFER_SIZE);      if (len == -1) {       break;      }      fos.write(buf, 0, len);      curPos = curPos + len;      if (curPos > endPos) {       // 获取正确读取的字节数       readByte += len - (curPos - endPos) + 1;      } else {       readByte += len;      }     }     // System.out.println("线程" + id + "已经下载完毕:&quo

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