2011-12-25 121 views
1

我有以下任務:使Android程序從FTP服務器下載1,000個文件(300兆字節)。現在我已經制作了一個解析文件樹並將其下載到SDCard的程序。但這需要很長時間(40分鐘),並且不好,我需要縮短下載時間。文件正在下載代碼:如何使用多線程通過FTP下載文件?

BufferedOutputStream buffIn=new BufferedOutputStream(new FileOutputStream(f)); 
mClient.retrieveFile(ftpFile.getName(), buffIn); 
buffIn.close(); 

但是,我怎樣才能使用它的多線程?我使用apache-commons庫,FTPClient類。我不認爲我應該將下載代碼複製到Thread中,它可以幫助我。請幫助我,我怎樣才能縮短下載時間?

+0

謝謝你的回覆。我贊同你。可能會有更多的聯繫嗎?有人知道如何製作它嗎? – user1078760 2011-12-25 12:38:20

+0

同樣,如果您的限制是帶寬,爲什麼? – fge 2011-12-25 13:09:50

+0

你認爲 - 確定。如果FTP服務器是有限的,並且您有其他鏡像,那麼是的,打開其他文件的連接可能是有益的,但是對於其他文件而言,可能是有益的,而不是同一個FTP服務器。 – fge 2011-12-25 13:18:24

回答

3

如果該服務器限制每個連接的帶寬(如評論中的@fge所表示的那樣),那麼使多個連接從FTP服務器下載文件可能僅有益。

讓我們來看看一些例子:

假設你有8 Mbps連接到互聯網,它給你1兆字節/秒的理論最大下載速度。

方案1:你是從一個FTP服務器強加下載限制下載100兆字節的文件。

如果您使用一個連接下載文件,則以1兆字節/秒的速度下載文件 ,需要100秒(1分40秒)。

通過使用兩個連接(假設可以通過FTP同時下載一個文件的不同部分),您可以爲每個連接以0.5兆字節/秒的速度下載文件,總計爲1兆字節/秒,你100 秒(1分40秒)下載文件。

因此,我們得出結論,在這種情況下,多個連接不會幫助 。


方案2:你是從規定的0.5兆字節/秒爲每個 連接的下載限制FTP服務器下載一個100兆字節的文件。

如果您使用一個連接下載文件,則以0.5兆字節/秒(服務器強加)的形式下載文件 ,需要200秒的時間(3分20秒)。

通過使用兩個連接(假設可以通過FTP同時下載一個文件的不同部分),您可以爲每個連接以0.5兆字節/秒的速度下載文件 ,總計1兆字節/秒,帶您100秒 (1分40秒)下載文件。

所以我們得出結論,在這種情況下, 實際上有助於多個連接。


方案3:您正在下載多個文件 - 讓我們說每一個100兆的兩個文件 - 從FTP服務器(下載限制 忽視,因爲我們已經看到,當施加限制時,多個 連接可以幫助)。

如果你使用的每個文件一個連接 (兩個連接)下載,同時這兩個文件,你下載的每個文件在0.5 兆字節/秒,有什麼需要你們200秒(3分鐘20秒)下載 均爲文件。換句話說,你只能在200秒後得到這兩個文件。

在另一方面,逐個下載文件,其在一次只有一個 連接,則在1兆字節/秒的下載兩個文件,什麼 還需要200秒(3分鐘20秒),你僅在100秒(1分20秒)後獲得第一個文件 ,以及稍後的秒100秒 。

所以我們得出結論:在這種情況下,它取決於文件 是自己有用還是僅作爲一個整體。

對不起,不能直接解決你的問題,但我認爲你應該先考慮這種情況,並瞭解是否有什麼可以脫離多個連接,在你的情況。

相關問題