来自多线程下载的文件不同于单线程

时间:2014-09-19 19:23:29

标签: java httpurlconnection

我最近一直在尝试多线程,我编写了一个使用HTTPUrlConnection的Range请求属性下载文件的应用程序。我首先从标题中获取文件的长度,然后将其拆分为X个相等的部分,如果有剩余部分,我再分配一个线程来处理松弛。然后每个部分进入队列内的对象。然后多个线程访问队列中的每个任务并执行它,同时将每个部分下载到单独的文件中。

我加入文件的方式是问题。无论我使用Linux cat还是Windows'copy /Btype,都会发现生成的文件在某种程度上无效。

使用AVI文件时,索引会中断,但重建后,AVI会正常播放。使用.rar文件winrar显示“意外的归档结束”,尽管文件正常提取。可能导致这种情况的原因。我确保在线程之间将其拆分时没有重叠的字节。

1 个答案:

答案 0 :(得分:0)

您错误地将Range参数用于请求。结束索引用于读取最后一个字符包含,而您的算法会传递您不想要传输的第一个字符的索引。从作为end参数传递给DownloadPart的参数中减去1,你应该没问题:

list.add(new DownloadPart(pos, pos + pieceLen - 1, savePath, url, String.valueOf(ch)));

您还应该清理一些不必要的代码重复;您的第一个完整区块不需要与任何其他完整区块区别对待,这将简化您的代码。

相关问题