问题描述
我想使用Java开发一个下载软件,在linux下使用,用来下载http,ftp,迅雷,快车等资源,目前已经能够使用单线程下载这些资源,正在想办法实现多线程下载我的构想是用到读写XML,多线程等知识完成该程序,但是还有问题没有得到解决:1》每个线程都下载文件的一部分,那么这些线程是共有一个临时文件;还是生成多个临时文件来保存各自的那部分信息,最后再合并这些临时文件......如果真的是使用很多个临时文件,那100个线程岂不是要100个临时文件?能不能事先在磁盘上创建一个与下载文件大小相同的临时文件,然后所有的线程将下载的信息覆盖式的写入临时文件?这个思路可行吗?这个思路与磁盘缓存有关吗?2》需要一些文件校验吗?MD5?3》假如正在下载,突然用户强制结束进程,数据怎么处理?4》除了我介绍的上面外,还有哪些要考虑的啊?我分不多,但还是希望大家提供思路,不需提供代码!
解决方案
本帖最后由 xiaowang_wbj 于 2010-12-16 21:13:00 编辑
解决方案二:
先支持一下,有空再想!!
解决方案三:
3》假如正在下载,突然用户强制结束进程,数据怎么处理?支持断点下载,保存临时文件,如果用户强制结束是,下次启动时,就从已经下载处继续下载剩余
解决方案四:
回复2楼:但是在细节上,用户如果是暂停或者正常退出的话,程序肯定会保存这些断点信息到XMl以便下次继续下载,但是如果是杀死进程(或者结束进程的话),数据是不是被破坏了啊?能不能进程被杀后,还保留一个线程来处理断点信息啊?
解决方案五:
按照固定大小分包下载,下载下来后,记录起始地址和终止地址,通过CRC打包,分成多个文件或者合成一个文件都可以。下载完成后,根据每个包的起始地址和终止地址重新生成下载文件。
解决方案六:
该回复于2010-12-17 10:02:11被版主删除
解决方案七:
如果一个包没有下载完成,就中断了,那么下次就要重新下载这个包;如果要做的好点,也可以对这个包做断点下载。这样有点麻烦的。引用3楼xiaowang_wbj的回复:
回复2楼:但是在细节上,用户如果是暂停或者正常退出的话,程序肯定会保存这些断点信息到XMl以便下次继续下载,但是如果是杀死进程(或者结束进程的话),数据是不是被破坏了啊?能不能进程被杀后,还保留一个线程来处理断点信息啊?
解决方案八:
引用1楼buqitianxie的回复:
先支持一下,有空再想!!
!
解决方案九:
支持加速下载,和限速下载否?断点下载。BT下载。资源搜索。文件病毒扫描。
解决方案十:
该回复于2010-12-24 12:58:32被版主删除
解决方案十一:
该回复于2010-12-24 12:59:45被版主删除
解决方案十二:
我最近也在做多线程多任务的下载工具,也做到了单线程多任务!后面打算加成多线程的!
解决方案十三:
我也正在学习,期待楼主有个好的学习资料