论坛首页 Java企业应用论坛

多线程断点续传实践

浏览 64756 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-07-20  
smilesail 写道
运行了几次  下载完都无法打开压缩包 而且不能把临时文件全删了  不知道是什么原因
没有抛任何异常

我运行几次也是这样!下载的文件有时5M,有时9M!临时文件有些没有删除!
0 请登录后投票
   发表时间: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;
上面两位的问题估计就是这里了。
0 请登录后投票
   发表时间:2009-07-20   最后修改:2009-07-20
sorry!犯了这个低级错误。那天匆匆改了,也没仔细看。这次我测试过了,更新了附件。

嗯~RandomAccessFile下次再改...
0 请登录后投票
   发表时间:2009-07-21  
windywindy 写道
smilesail 写道
运行了几次  下载完都无法打开压缩包 而且不能把临时文件全删了  不知道是什么原因
没有抛任何异常

我运行几次也是这样!下载的文件有时5M,有时9M!临时文件有些没有删除!

修改了 startPosition += len;还是出现这个错误!
0 请登录后投票
   发表时间:2009-07-21  
一直在协议上有所作为,哎,感觉好难
0 请登录后投票
   发表时间:2009-07-21  
windywindy 写道
windywindy 写道
smilesail 写道
运行了几次  下载完都无法打开压缩包 而且不能把临时文件全删了  不知道是什么原因
没有抛任何异常

我运行几次也是这样!下载的文件有时5M,有时9M!临时文件有些没有删除!

修改了 startPosition += len;还是出现这个错误!


你重新下载第一页的附件运行看看,我试过了没问题的啊.
0 请登录后投票
   发表时间:2009-07-21  
关于断点续传那一块,没有持久化,如果程序down了,能断点续传么
0 请登录后投票
   发表时间:2009-07-23  
断点续传可以参考这个哥们的:http://calmness.iteye.com/blog/220075
0 请登录后投票
   发表时间:2009-07-25  
2009-07-25添加附件2,修改过的download,用RadomAccessFile,一个临时文件记录下载位置。
0 请登录后投票
   发表时间: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并不代表文件就已经下载完毕了,有可能仅仅是最后一块下载完毕了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics