HTTP多线程断点续传下载的尝试 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-22
HTTP多线程断点续传下载的尝试时间:2010-12-16 java2000直接看代码吧,废话一点不多说。 功能介绍: 1 多线程HTTP下载 2 支持断点续传 3 临时文件下载,成功后改名 4 提供防盗链的破解 Java代码 1.import java.io.BufferedInputStream; 2.import java.io.BufferedWriter; 3.import java.io.File; 4.import java.io.OutputStreamWriter; 5.import java.io.RandomAccessFile; 6.import java.net.Socket; 7.import java.net.URL; 8.import java.net.URLConnection; 9.import java.util.HashMap; 10.import java.util.Map; 11. 12./** 13. * HTTP的多线程下载工具。 14. * 15. * @author 赵学庆 www.java2000.net 16. */ 17.public class HTTPDownloader extends Thread { 18. // 要下载的页面 19. private String page; 20. 21. // 保存的路径 22. private String savePath; 23. 24. // 线程数 25. private int threadNumber = 2; 26. 27. // 来源地址 28. private String referer; 29. 30. private String cookie; 31. 32. int threadPointer = 0; 33. 34. private Map<Integer, HTTPDownloaderThread> threadPool = new HashMap<Integer, HTTPDownloaderThread>(); // 线程迟 35. 36. // 最小的块尺寸。如果文件尺寸除以线程数小于这个,则会减少线程数。 37. private int MIN_BLOCK = 10 * 1024; 38. 39. public static void main(String[] args) throws Exception { 40. HTTPDownloader d = new HTTPDownloader("http://www.xxxxx.com/a.rar", null, "d://a.rar", 10, null); 41. d.down(); 42. } 43. 44. public void run() { 45. try { 46. down(); 47. } catch (Exception e) { 48. e.printStackTrace(); 49. } 50. } 51. 52. /** 53. * 下载操作 54. * 55. * @throws Exception 56. */ 57. public void down() throws Exception { 58. URL url = new URL(page); // 创建URL 59. URLConnection con = url.openConnection(); // 建立连接 60. con.setRequestProperty("Referer", referer == null ? page : referer); 61. con.setRequestProperty("UserAgent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; flashget)"); 62. int contentLen = con.getContentLength(); // 获得资源长度 63. if ((contentLen / MIN_BLOCK + 1) < threadNumber) { 64. threadNumber = contentLen / MIN_BLOCK + 1; // 调整下载线程数 65. } 66. if (threadNumber > 10) { 67. threadNumber = 10; 68. } 69. int begin = 0; 70. int step = contentLen / threadNumber + 1; 71. int end = 0; 72. HTTPDownloaderThread thread; 73. for (threadPointer = 0; threadPointer < threadNumber; threadPointer++) { 74. end += step; 75. if (end > contentLen) { 76. end = contentLen; 77. } 78. thread = new HTTPDownloaderThread(this, threadPointer, begin, end); 79. threadPool.put(threadPointer, thread); 80. thread.start(); 81. begin = end; 82. } 83. } 84. 85. /** 86. * 一个线程完活了。 87. * 88. * @param id 完活的线程id 89. */ 90. public synchronized void finished(int id) { 91. threadNumber--; 92. threadPool.remove(id); 93. if (threadNumber <= 0) { 94. System.out.println("FINISHED:" + savePath); 9 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于HTTP多线程断点续传下载的尝试 - 编程入门网的所有评论