2013-01-31 5 views
2

FTP 서버에서 MP3 파일을 다운로드 중입니다. 그것은 안드로이드 응용 프로그램을 다운로드하고 MP3 파일을 재생합니다. 이 다운로드는 apache commons 라이브러리를 사용하여 Java로 구현되며 코드는 주로 다른 자습서를 기반으로합니다. 다운로드는 Java를 실행하는 데스크탑에서 매우 빠르게 작동하는데 약 10 초의 파일을 다운로드하는 데 약 5 초가 소요되지만 Android 디바이스에서 실행되는 동일한 코드 (2 개 시도)는 다운로드 속도가 5 ~ 10 분이 지나치게 느립니다. 같은 파일. (두 가지 테스트 모두 Wi-Fi를 통해 수행되었습니다). 를 기반으로안드로이드에서 FTP 다운로드 매우 느림 (자바로 빠름)

코드 : 연결 및 다운로드 : 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 분이 걸립니다. Genial. 고맙습니다.