Android下载速度非常慢(仅Java快速下载)

时间:2013-01-31 17:29:12

标签: java android apache apache-commons ftp-client

我正在从FTP服务器下载MP3文件。这是一个Android应用程序,它将下载然后播放MP3文件。下载是使用apache commons库在Java中实现的,代码主要基于另一个教程。下载在我运行Java的桌面上运行速度非常快,大约需要5秒才能下载一个大约10mb的文件,但是在Android设备上运行相同的代码(我已经尝试过2次),下载时需要5-10分钟才会慢得多同一个文件。 (两项测试均通过Wifi完成)。

代码基于: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;
}

希望我已经提到了所需的所有细节,如果有人能解释为什么它会如此慢以及如何在合理的时间内下载它,我将不胜感激。

2 个答案:

答案 0 :(得分:10)

遇到类似问题,通过更改下载缓冲区大小解决了这个问题。

奇怪的是,相同的代码在Android模拟器x86上速度非常快,但在真实设备上速度却很慢。

因此,在调用下载函数 retrieveFile 之前 添加如下这样的一行:

mFTPClient.setBufferSize(1024*1024);

答案 1 :(得分:0)

因此,在调用下载函数retrieveFile之前,添加如下所示的行:

mFTPClient.setBufferSize(1024*1024);

这是正确的解决方案。我的应用程序在20分钟内下载10个文件的速度很慢。用这个缓冲区修改需要1分钟。 和煦。非常感谢你。