2011-12-25 12 views
1

私は以下のタスクを持っています:FTPサーバー(300メガバイト)から1,000ファイルをダウンロードするためのAndroidプログラムを作成する。今、私はファイルのツリーを解析し、S​​DCardにダウンロードするプログラムを作った。しかし、それは多くの時間(40分)を要し、それは良くない、私はダウンロードの時間を減らす必要があります。ファイルをコードでダウンロード中:マルチスレッドを使用してFTP経由でファイルをダウンロードする方法は?

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

しかし、どのようにしてマルチスレッドを使用できますか?私は、FTPClientクラスのapache-commonsライブラリを使用します。私はスレッドのダウンロードコードをコピーする必要があるとは思わないし、それは私を助けます。どうすればダウンロード時間を短縮できますか?

+0

ありがとうございます。仰るとおりです。より多くの接続を行うことは可能でしょうか?誰もそれを作る方法を知っていますか? – user1078760

+0

もう一度、あなたの制限が帯域幅ならば、なぜですか? – fge

+0

あなたはそう思っています。 FTPサーバーが限られていて、他のミラーがある場合は、他のファイルの接続を開くことは有益ですが、同じではなく、他のFTPサーバーに接続することが有益です。 – fge

答えて

3

FTPサーバーからファイルをダウンロードする複数の接続を行うと、そのサーバーが各接続の帯域幅を制限する場合にのみ役立ちます(コメント内の@fgeで表されるように)。

は、いくつかの例を見てみましょう:

は、あなたがあなたの1メガバイト/秒の理論上の最大ダウンロード速度を与え、インターネットへの8 Mbpsの接続を持っていると仮定します。

シナリオ1:あなたはダウンロード制限を課していないFTPサーバから100メガバイトのファイルをダウンロードしています。

1つの接続を使用してファイルをダウンロードする場合は、 を1メガバイト/秒でダウンロードします.100秒(1分40秒)かかります。

2つの接続を使用すると(同時に1つのファイルの異なる部分をダウンロードすることが可能であると仮定して)、接続ごとに0.5メガバイト/秒のファイルをダウンロードします(合計で1メガバイト/秒)ファイルをダウンロードするには100 秒(1分40秒)です。

このシナリオでは、複数の接続では が役に立たないと判断しました。


シナリオ2:あなたは0.5メガバイト/各 接続するための秒のダウンロード制限を課しFTPサーバから100メガバイトのファイルをダウンロードしています。

1つの接続を使用してファイルをダウンロードしている場合は、 を0.5メガバイト/秒(サーバーによって課されます)でダウンロードし、200 秒(3分20秒)を要します。

2つの接続を使用すると(同時に1つのファイルの異なる部分をダウンロードすることが可能であると仮定して)、接続ごとに0.5メガバイト/秒のファイルをダウンロードします。合計は1メガバイト/秒、100ファイルをダウンロードするには (1分40秒)秒を入力します。

このシナリオでは、複数の接続が実際には を実行すると結論づけます。


シナリオ3:あなたは複数のファイルをダウンロードしている - 我々はすでにことを見てきたように無視FTPサーバー(ダウンロード制限 から - さんは100メガバイトごとの2つのファイルを言わせて制限が課せられた場合は、 の複数の接続が役立ちます)。

あなたはファイルごとに1つの接続 (2つの接続)を使用して、同時に両方のファイルをダウンロードしている場合は、ダウンロードするにはあなたに200秒(3分の20秒)を取るもの、0.5 メガバイト/秒での各ファイルをダウンロードします ファイル。つまり、200秒後に2つのファイルしか取得できません。一方

、一度に一つだけ 接続を持つ、ファイルを一つずつダウンロードし、あなたも200秒(3分の20秒)を取るもの 、1メガバイト/秒で両方のファイルをダウンロードし、しかしますが最初のファイル を100秒後(1分20秒)、秒を100秒後に 後で取得します。

このシナリオでは、ファイル が単独で、または全体として有用かどうかによって異なります。

申し訳ありませんが、私はこのシナリオを熟考して、複数の接続から抜け出すかどうかを理解する必要があります。

関連する問題