Android多線程斷點續傳原理解析

在下載大文件的時候,我們往往要使用多線程斷點續傳,保證數據的完整性,首先說多線程,我們要多線程下載一個大文件,就有開啓多個線程,多個connection,既然是一個文件分開幾個線程來下載,那肯定就是一個線程下載一個部分,如果文件的大小是200M, 使用兩個線程下載, 第一個線程下載1-100M, 第二個線程下載101-200M。
我們在請求的header裏面設置

conn.setRequestProperty("Range", "bytes="+startPos+"-"+endPos);  

這裏startPos是指從數據端的哪裏開始,endPos是指數據端的結束
根據這樣我們就知道,只要多個線程,按順序指定好開始跟結束,就可以解決下載衝突的問題了。

如何寫文件

byte[] buffer = new byte[1024];  
int offset = 0;   
RandomAccessFile threadFile = new RandomAccessFile(this.saveFile,"rwd");  
threadFile.seek(startPos);  
threadFile.write(buffer,0,offset);  

從上面代碼可以看出,每個線程找到自己開始寫的位置,就是seek(startPos)
這樣就可以保證數據的完整性,也不會重複寫入了

基本上多線程的原理就是這樣,其實也很簡單
那麼我們接着說斷點續傳,斷點續傳其實也很簡單,原理就是使用數據庫保存上次每個線程下載的位置和長度
例如我開了兩個線程T1,T2來下載一個文件,設文件總大小爲1024M,那麼就是每個線程下載512M
可是我的下載中斷了,那麼我下次啓動線程的時候(繼續下載),是不是應該要知道,我原來下載了多少呢
所以是這樣的,每下載一點,就更新數據庫的數據,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章