2011-12-25 87 views
1

我有以下任务:使Android程序从FTP服务器下载1,000个文件(300兆字节)。现在我已经制作了一个解析文件树并将其下载到SDCard的程序。但这需要很长时间(40分钟),并且不好,我需要缩短下载时间。文件正在下载代码:如何使用多线程通过FTP下载文件?

BufferedOutputStream buffIn=new BufferedOutputStream(new FileOutputStream(f)); 
mClient.retrieveFile(ftpFile.getName(), buffIn); 
buffIn.close(); 

但是,我怎样才能使用它的多线程?我使用apache-commons库,FTPClient类。我不认为我应该将下载代码复制到Thread中,它可以帮助我。请帮助我,我怎样才能缩短下载时间?

+0

谢谢你的回复。我赞同你。可能会有更多的联系吗?有人知道如何制作它吗? – user1078760 2011-12-25 12:38:20

+0

同样,如果您的限制是带宽,为什么? – fge 2011-12-25 13:09:50

+0

你认为 - 确定。如果FTP服务器是有限的,并且您有其他镜像,那么是的,打开其他文件的连接可能是有益的,但是对于其他文件而言,可能是有益的,而不是同一个FTP服务器。 – fge 2011-12-25 13:18:24

回答

3

如果该服务器限制每个连接的带宽(如评论中的@fge所表示的那样),那么使多个连接从FTP服务器下载文件可能仅有益。

让我们来看看一些例子:

假设你有8 Mbps连接到互联网,它给你1兆字节/秒的理论最大下载速度。

方案1:你是从一个FTP服务器强加下载限制下载100兆字节的文件。

如果您使用一个连接下载文件,则以1兆字节/秒的速度下载文件 ,需要100秒(1分40秒)。

通过使用两个连接(假设可以通过FTP同时下载一个文件的不同部分),您可以为每个连接以0.5兆字节/秒的速度下载文件,总计为1兆字节/秒,你100 秒(1分40秒)下载文件。

因此,我们得出结论,在这种情况下,多个连接不会帮助 。


方案2:你是从规定的0.5兆字节/秒为每个 连接的下载限制FTP服务器下载一个100兆字节的文件。

如果您使用一个连接下载文件,则以0.5兆字节/秒(服务器强加)的形式下载文件 ,需要200秒的时间(3分20秒)。

通过使用两个连接(假设可以通过FTP同时下载一个文件的不同部分),您可以为每个连接以0.5兆字节/秒的速度下载文件 ,总计1兆字节/秒,带您100秒 (1分40秒)下载文件。

所以我们得出结论,在这种情况下, 实际上有助于多个连接。


方案3:您正在下载多个文件 - 让我们说每一个100兆的两个文件 - 从FTP服务器(下载限制 忽视,因为我们已经看到,当施加限制时,多个 连接可以帮助)。

如果你使用的每个文件一个连接 (两个连接)下载,同时这两个文件,你下载的每个文件在0.5 兆字节/秒,有什么需要你们200秒(3分钟20秒)下载 均为文件。换句话说,你只能在200秒后得到这两个文件。

在另一方面,逐个下载文件,其在一次只有一个 连接,则在1兆字节/秒的下载两个文件,什么 还需要200秒(3分钟20秒),你仅在100秒(1分20秒)后获得第一个文件 ,以及稍后的秒100秒 。

所以我们得出结论:在这种情况下,它取决于文件 是自己有用还是仅作为一个整体。

对不起,不能直接解决你的问题,但我认为你应该先考虑这种情况,并了解是否有什么可以脱离多个连接,在你的情况。

相关问题