文件从多线程下载不同于单线程



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

我加入文件的方式是个问题。无论我使用的是Linux cat还是Windows的copy /Btype,结果总是以某种方式无效。

使用AVI文件时,索引会被破坏,但重新生成时,AVI会正确播放。对于.rar文件,winrar显示"意外的存档结束",尽管文件提取正常。是什么导致了这种情况。当我在线程之间分割时,我确保没有字节重叠。

您对请求使用的Range参数不正确。结束索引用于要读取的最后一个字符,包含,而您的算法会传递不希望传输的第一个字符的索引。从作为end参数传递给DownloadPart的参数中减去1,就可以了:

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

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

最新更新