0

次のタスクの遅延のために進行状況バーを実装する必要があります

FileOutputStream Fos= new FileOutputStream(FilePath);
byte buffer[]=Services.downloadFile(FilePath);
Fos.write(buffer);

さて、進行状況バーを更新するためにファイルがどれだけダウンロードされたかを知るにはどうすればよいですか

4

1 に答える 1

1

ファイルをチャンクで提供しないため、これは簡単でServices.downloadFile()はありません。ループがあれば、それは簡単です。

API を変更できる場合は、次のように変更することをお勧めします。

Services.downloadFile(File, OutputStream);

ファイルをdownloadFile()ストリームに書き込みます。これで、さまざまなバージョンの をオーバーロードして、ストリームをラップし、書き込まれたバイト数をカウントできますwrite()

[編集]Services RMI プロキシであることがわかりました。この場合、上記の方法は使用できません。代わりに、より複雑になります。

サーバー上にダウンロードのプールが必要です (「マップ」と考えてください)。プールを使用すると、ダウンロードごとに別のデータ ブロックを要求できます。

したがって、サーバーには次のものが必要です。

  1. byte[] read()ダウンロードを処理し、メソッドを持つオブジェクトを作成します。
  2. オブジェクトをキーでマップに配置します。何らかの方法でキーをクライアントに送信します。
  3. オブジェクトごとに、実際にデータをダウンロードしてデータをバッファに追加するスレッドを作成します。このread()メソッドは、バッファの内容を返し、それをクリアします。

クライアントで:

  1. サーバーでメソッドを呼び出して、新しいダウンロード オブジェクトを作成し、ダウンロード スレッドを開始する必要があります。
  2. read()次に、サーバー上のダウンロード オブジェクトを呼び出すループが必要です。API は のようなもので、サーバーはマップ内のキーを検索し、ダウンロード オブジェクトread(key)を呼び出します。read()
  3. 読み取り呼び出しの結果をファイルに書き込むときに進行状況を表示します
于 2011-03-20T20:25:12.593 に答える