Java Progress Bar帮助

时间:2011-03-20 20:20:04

标签: java progress-bar fileoutputstream

我需要为以下任务延迟实施进度条

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

现在,我怎么知道已经下载了多少文件以更新进度条

1 个答案:

答案 0 :(得分:1)

这并不容易,因为Services.downloadFile()没有以块的形式提供文件。如果你有一个循环,那很简单。

如果您可以更改API,我建议您以这种方式更改它:

Services.downloadFile(File, OutputStream);

downloadFile()将文件写入流中。现在,您可以通过重载write()的各种版本来包装流并计算写入的字节数。

[编辑] 我看到Services是RMI代理。在这种情况下,您无法使用上述方法。相反,它变得更复杂:

您的服务器上需要一个下载池(想想“地图”)。该池允许您为每次下载请求另一个数据块。

因此,在您的服务器上,您需要:

  1. 创建一个处理下载的对象,该对象具有byte[] read()方法。
  2. 将对象放入带有键的地图中。以某种方式将密钥发送给客户端。
  3. 对于每个对象,创建一个实际下载数据并将数据添加到缓冲区的线程。 read()方法返回缓冲区的内容并清除它。
  4. 在客户端:

    1. 您需要在服务器上调用一个方法来创建一个新的下载对象并启动下载线程。
    2. 现在您需要一个在服务器上的下载对象上调用read()的循环。 API类似于read(key),服务器在地图中查找密钥,然后在下载对象上调用read()
    3. 在将读取调用的结果写入文件时显示进度