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 回答