2013-01-31 52 views
2

我正在從FTP服務器下載MP3文件。這是一個Android應用程序,它將下載並播放MP3文件。下載使用apache commons庫以Java實現,代碼主要基於另一個教程。在運行Java的桌面上,下載速度非常快,大約需要5秒來下載一個大約10mb的文件,但是在Android設備上運行的相同代碼(我嘗試過2)使用5-10分鐘下載相同的文件。 (兩個測試都是通過Wifi完成的)。基於FTP下載在Android極其緩慢(快速在Java中)

代碼:http://androiddev.orkitra.com/?p=28&cpage=2#comment-40

下面的代碼顯示使用的兩種方法:連接和下載。

public boolean connect(String host, String username, String pass, int port){ 
    try{ 

     mFTPClient.connect(host, port); 

     if(FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) { 
       boolean loginStatus = mFTPClient.login(username, pass); 

       mFTPClient.setFileType(FTP.BINARY_FILE_TYPE); 
       mFTPClient.enterLocalPassiveMode(); 
       mFTPClient.setKeepAlive(true); 

       return loginStatus; 
     } 


    } catch (Exception e){ 
     System.err.println("Error: Could not connect to: " + host); 
     e.printStackTrace(); 
    } 

    return false; 
} 

    public boolean download(String srcFilePath, String dstFilePath) { 
    boolean downloadStatus = false; 
    try { 
     FileOutputStream dstFileStream = new FileOutputStream(dstFilePath); 
     downloadStatus = mFTPClient.retrieveFile(srcFilePath, dstFileStream); 
     dstFileStream.close(); 
     return downloadStatus; 
    } catch (Exception e) { 
     System.err.println("Error: Failed to download file from " + srcFilePath + " to " + dstFilePath); 
    } 
    return downloadStatus; 
} 

希望我所提到的所需的所有細節,並希望如果有人可以解釋爲什麼它是又慢又如何,如果在所有我可以使它在一個合理的時間下載。

+0

比較speedtest.net桌面和移動結果嗎?我家裏有一個Wi-Fi網絡,但我從來沒有像從PC那樣快速下載任何東西。 –

+0

剛剛完成並且Speed Test在手機上給出了〜26mb,在桌面上給出了〜29mb。然而,ping在桌面上使用23ms,在手機上使用62ms。這可能是問題的原因嗎? –

+0

你的手機上有另一個FTP客戶端嗎?如果是,結果是否可比? – fge

回答

10

偶然遇到類似的問題,通過更改下載緩衝區大小來解決它。

奇怪的是,相同的代碼在Android模擬器x86上速度非常快,但在真實設備上速度很慢。

所以,調用下載功能retrieveFile前 添加一行:

mFTPClient.setBufferSize(1024*1024); 
+0

更改緩衝區大小有助於提高下載速度。 – oneConsciousness

+0

這固定了一個真正的痛苦,但問題I在某些設備上看到使用ftp –

+0

的確切和我正在尋找的答案,感謝兄弟 –

0

所以,調用下載功能retrieveFile添加一行在此之前:

mFTPClient.setBufferSize(1024*1024); 

這是正確的解決方案。我的應用程序在20分鐘內下載10個文件的速度很慢。通過修改緩衝區需要1分鐘。 親切。非常感謝你。