最近我一直在嘗試多線程,並編寫了一個應用程序,該應用程序使用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