Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的FTP下载速度非常慢(仅Java中的速度很快)_Java_Android_Apache_Apache Commons_Ftp Client - Fatal编程技术网

Android中的FTP下载速度非常慢(仅Java中的速度很快)

Android中的FTP下载速度非常慢(仅Java中的速度很快),java,android,apache,apache-commons,ftp-client,Java,Android,Apache,Apache Commons,Ftp Client,我正在从FTP服务器下载MP3文件。它适用于Android应用程序,该应用程序将下载并播放MP3文件。下载是使用ApacheCommons库在Java中实现的,代码主要基于另一个教程。在我运行Java的桌面上,下载速度非常快,下载一个10mb的文件大约需要5秒钟,但在Android设备上运行的相同代码(我尝试了2个)上,下载相同文件的速度要慢得可笑,需要5-10分钟。(两项测试都是通过Wifi进行的) 代码基于: 下面的代码显示了使用的两种方法:连接和下载 public boolean

我正在从FTP服务器下载MP3文件。它适用于Android应用程序,该应用程序将下载并播放MP3文件。下载是使用ApacheCommons库在Java中实现的,代码主要基于另一个教程。在我运行Java的桌面上,下载速度非常快,下载一个10mb的文件大约需要5秒钟,但在Android设备上运行的相同代码(我尝试了2个)上,下载相同文件的速度要慢得可笑,需要5-10分钟。(两项测试都是通过Wifi进行的)

代码基于:

下面的代码显示了使用的两种方法:连接和下载

    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;
}

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

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

奇怪的是,同样的代码在Android仿真器x86上运行得非常快,但在真正的设备上运行得非常慢


因此,在调用下载函数检索文件之前 添加一行如下所示:

mFTPClient.setBufferSize(1024*1024);
mFTPClient.setBufferSize(1024*1024);

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

mFTPClient.setBufferSize(1024*1024);
mFTPClient.setBufferSize(1024*1024);
这是正确的解决方案。我的应用程序在20分钟内下载10个文件很慢。修改缓冲区需要1分钟。
和蔼的非常感谢。

您是否比较了speedtest.net桌面版和移动版的测试结果?我在家里有一个Wi-Fi网络,但我从来没有从PC上下载过这么快的东西。我刚刚完成了速度测试,手机上的下载速度约为26mb,桌面上的下载速度约为29mb。然而,ping要大得多,在台式机上为23毫秒,在移动设备上为62毫秒。这可能是问题的原因吗?您的手机上是否有其他FTP客户端?如果是,结果是否具有可比性?我刚刚尝试过,而且速度很快,需要5-6秒,所以一定是应用程序而不是设备解决了这个问题,但我在使用FTP的某些设备上看到了一个真正的问题。这正是我想要的答案,谢谢老兄