最近我一直在尝试多线程,并编写了一个应用程序,该应用程序使用HTTPUrlConnection的Range请求属性下载文件。我首先从头文件中获得文件的长度,然后将它分成X个相等的部分,如果有剩余部分,我再分配一个线程来弥补松弛。然后,每个部分进入队列中的对象。然后多个线程访问队列中的每个任务并执行它,并将每个部分同时下载到单独的文件中。多线程下载与单线程不同的文件
我加入文件的方式是问题。无论我使用的是Linux cat
还是Windows的copy /B
或type
,它总是会出现结果文件以某种方式失效。
使用AVI文件时,索引被破坏,但重建时,AVI播放正确。 .rar文件winrar显示“意外的归档结束”,尽管这些文件正常提取。什么可能导致这一点。当我在线程之间分割时,我确信没有字节重叠。
你可以在你的问题上添加更多信息吗?我认为它很不清楚 – msrd0 2014-09-19 19:34:26
我会下载(原始)完整文件,并在两个平行窗口中执行原始文件和重新组装的文件的十六进制转储。这样你可以看到什么内容是相同的,哪些内容是不同的。您提到的所有实用程序都是针对文本内容而非二进制文件的,所以如果您在这些二进制文件中使用这些文件时没有正确行事,我不会感到惊讶。我将使用FileInputStream在所有下载完成后一次一个地重新读取它们,并以正确的顺序将它们写入单个FileOutputStream中。 – Tim 2014-09-19 19:39:34
我在十六进制编辑器中发现的是,对于我制作的每个零件,至少有一个字符偏移量。这些变化是波动的,我必须找出发生变化的地方。 – 2014-09-19 19:50:12