3

我正在从 FTP 服务器下载 MP3 文件。它适用于将下载并播放 MP3 文件的 Android 应用程序。下载是使用 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;
}

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

4

2 回答 2

11

偶然发现类似的问题,通过更改下载缓冲区大小解决了它。

奇怪的是相同的代码在 Android 模拟器 x86 上非常快,但在真实设备上却慢得令人痛苦。

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

mFTPClient.setBufferSize(1024*1024);
于 2013-02-13T19:06:24.493 回答
0

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

mFTPClient.setBufferSize(1024*1024);

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

于 2014-05-25T18:44:52.560 回答