快速业务通道

HTTP多线程断点续传下载的尝试 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
5. File f1 = new File(savePath + ".tmp"); 96. File f2 = new File(savePath); 97. // 如果目标文件已经存在,则尝试删除它 98. // 最多尝试3次,间隔1秒钟。 99. int times = 3; 100. while (f2.exists() && times > 0) { 101. if (f2.delete()) { 102. break; 103. } 104. try { 105. Thread.sleep(1000); 106. } catch (InterruptedException e) { 107. e.printStackTrace(); 108. } 109. times--; 110. } 111. if (!f2.exists()) { 112. if (!f1.renameTo(f2)) { 113. System.out.println("改名失败!"); 114. } 115. } else { 116. System.out.println("目标文件存在,且无法删除,无法改名"); 117. } 118. } else { 119. int size = 0; 120. HTTPDownloaderThread o = null; 121. // 尝试查找一个可以分担的线程 122. for (HTTPDownloaderThread thread : threadPool.values()) { 123. if (thread.endPos - thread.curPos > size) { 124. size = thread.endPos - thread.curPos; 125. o = thread; 126. } 127. } 128. if (size > MIN_BLOCK * 2) { 129. if (o.isAlive()) { 130. int endPos = o.endPos; 131. int beginPos = o.endPos - ((o.endPos - o.curPos) / 2); 132. o.endPos = beginPos; 133. threadNumber++; 134. threadPointer++; 135. HTTPDownloaderThread thread = new HTTPDownloaderThread(this, threadPointer, beginPos, endPos); 136. threadPool.put(threadPointer, thread); 137. System.out.println("A Help Thread for " + o.id + " is started with:" + threadPointer); 138. thread.start(); 139. } 140. } 141. } 142. } 143. 144. public HTTPDownloader() { 145. } 146. 147. /** 148. * 下载 149. * 150. * @param page 被下载的页面 151. * @param savePath 保存的路径 152. */ 153. public HTTPDownloader(String page, String savePath) { 154. this(page, savePath, 10); 155. } 156. 157. /** 158. * 下载 159. * 160. * @param page 被下载的页面 161. * @param savePath 保存的路径 162. * @param threadNumber 线程数 163. */ 164. public HTTPDownloader(String page, String savePath, int threadNumber) { 165. this(page, page, savePath, 10, null); 166. } 167. 168. /** 169. * 下载 170. * 171. * @param page 被下载的页面 172. * @param savePath 保存的路径 173. * @param threadNumber 线程数 174. * @param referer 来源 175. */ 176. public HTTPDownloader(String page, String referer, String savePath, int threadNumber, String cookie) { 177. this.page = page; 178. this.savePath = savePath; 179. this.threadNumber = threadNumber; 180. this.referer = referer; 181. } 182. 183. public String getPage() { 184. return page; 185. } 186. 187. public void setPage(String page) { 188. this.page = page; 189. } 190. 191. public String getSavePath() { 192. return savePath; 193. } 194. 195. public void setSavePath(String savePath) { 196

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