锁定老帖子 主题:多线程断点续传实践
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-20
smilesail 写道 运行了几次 下载完都无法打开压缩包 而且不能把临时文件全删了 不知道是什么原因
没有抛任何异常 我运行几次也是这样!下载的文件有时5M,有时9M!临时文件有些没有删除! |
|
返回顶楼 | |
发表时间:2009-07-20
最后修改:2009-07-20
呵呵,MM又粗心了。
while (!this.task.statusError && (len = inputStream.read(b)) != -1) { outputStream.write(b, 0, len); count += len; startPosition += count; // 每读满4096个byte(一个内存页),往磁盘上flush一下 if (count % 4096 == 0) { outputStream.flush(); } } 上面第六行,应该是startPosition += len; 上面两位的问题估计就是这里了。 |
|
返回顶楼 | |
发表时间:2009-07-20
最后修改:2009-07-20
sorry!犯了这个低级错误。那天匆匆改了,也没仔细看。这次我测试过了,更新了附件。
嗯~RandomAccessFile下次再改... |
|
返回顶楼 | |
发表时间:2009-07-21
windywindy 写道 smilesail 写道 运行了几次 下载完都无法打开压缩包 而且不能把临时文件全删了 不知道是什么原因
没有抛任何异常 我运行几次也是这样!下载的文件有时5M,有时9M!临时文件有些没有删除! 修改了 startPosition += len;还是出现这个错误! |
|
返回顶楼 | |
发表时间:2009-07-21
一直在协议上有所作为,哎,感觉好难
|
|
返回顶楼 | |
发表时间:2009-07-21
windywindy 写道 windywindy 写道 smilesail 写道 运行了几次 下载完都无法打开压缩包 而且不能把临时文件全删了 不知道是什么原因
没有抛任何异常 我运行几次也是这样!下载的文件有时5M,有时9M!临时文件有些没有删除! 修改了 startPosition += len;还是出现这个错误! 你重新下载第一页的附件运行看看,我试过了没问题的啊. |
|
返回顶楼 | |
发表时间:2009-07-21
关于断点续传那一块,没有持久化,如果程序down了,能断点续传么
|
|
返回顶楼 | |
发表时间:2009-07-23
断点续传可以参考这个哥们的:http://calmness.iteye.com/blog/220075
|
|
返回顶楼 | |
发表时间:2009-07-25
2009-07-25添加附件2,修改过的download,用RadomAccessFile,一个临时文件记录下载位置。
|
|
返回顶楼 | |
发表时间:2009-07-27
最后修改:2009-07-27
大体上看了一下download2的代码,有个问题说一下。
续传的时候,判断文件是否已经下载完毕有问题。 if (file.exists()) { System.out.println("file " + fileName + " has exists!"); long localFileSize = file.length(); // 下载的目标文件已存在,判断目标文件是否完整 if (localFileSize < contentLength) { ... } } else { System.out.println("This file has download complete!"); } localFileSize等于contentLength并不代表文件就已经下载完毕了,有可能仅仅是最后一块下载完毕了。 |
|
返回顶楼 | |