快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19

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

时间:2011-02-04 csdn博客 赵学庆

一个网友正好需要这个东西,我就把几个技术整合到了一起。包括三个部分,实现时也是逐个做到的

多线程的文件下载,HTTP协议

把这个功能做成一个HTTP的服务,侦听在某个端口上,方便非Java的系统使用

把这个功能封装为一个Windows服务,在机器启动时可以自动启动

我们逐个看程序。

一、多线程下载

这个主要使用了HTTP协议里面的一个Range参数,他设置了你读取数据的其实位置和终止位置。 经常使用flashget的用户在查看连接的详细信息时,应该经常看到这个东西。比如

Range:bytes=100-2000

代表从100个字节的位置开始读取,到2000个字节的位置结束,应读取1900个字节。

程序首先拿到文件的长度,然后分配几个线程去分别读取各自的一段,使用了

RandomAccessFile

进行随机位置的读写。

下面是完整的下载的代码。

package net.java2000.tools; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.URL; import java.net.URLConnection; /** * HTTP的多线程下载工具。 * * @author 赵学庆 www.java2000.net */ public class HTTPDownloader extends Thread {   // 要下载的页面   private String page;   // 保存的路径   private String savePath;   // 线程数   private int threadNumber = 2;   // 来源地址   private String referer;   // 最小的块尺寸。如果文件尺寸除以线程数小于这个,则会减少线程数。   private int MIN_BLOCK = 10 * 1024;   public static void main(String[] args) throws Exception {    HTTPDownloader d = new HTTPDownloader("http://www.xxxx.net/xxxx.rar", "d://xxxx.rar", 10);    d.down();   }   public void run() {    try {     down();    } catch (Exception e) {     e.printStackTrace();    }   }   /**   * 下载操作   *   * @throws Exception   */   public void down() throws Exception {    URL url = new URL(page); // 创建URL    URLConnection con = url.openConnection(); // 建立连接    int contentLen = con.getContentLength(); // 获得资源长度    if (contentLen / MIN_BLOCK + 1 < threadNumber) {     threadNumber = contentLen / MIN_BLOCK + 1; // 调整下载线程数    }    if (threadNumber > 10) {     threadNumber = 10;    }    int begin = 0;    int step = contentLen / threadNumber;    int end = 0;    for (int i = 0; i < threadNumber; i++) {     end += step;     if (end > contentLen) {      end = contentLen;     }     new HTTPDownloaderThread(this, i, begin, end).start();     begin = end;    }   }   public HTTPDownloader() {   }   /**   * 下载   *   * @param page 被下载的页面   * @param savePath 保存的路径   */   public HTTPDownloader(String page, String savePath) {    this(page, savePath, 10);   }   /**   * 下载   *   * @param page 被下载的页面   * @param savePath 保存的路径   * @param threadNumber 线程数   */   public HTTPDownloader(String page, String savePath, int threadNumber) {    this(page, page, savePath, 10);   }   /**   * 下载   *   * @param page 被下载的页面   * @param savePath 保存的路径   * @param threadNumber 线

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