我需要为以下任务延迟实施进度条
FileOutputStream Fos= new FileOutputStream(FilePath);
byte buffer[]=Services.downloadFile(FilePath);
Fos.write(buffer);
现在,我怎么知道已经下载了多少文件以更新进度条
答案 0 :(得分:1)
这并不容易,因为Services.downloadFile()
没有以块的形式提供文件。如果你有一个循环,那很简单。
如果您可以更改API,我建议您以这种方式更改它:
Services.downloadFile(File, OutputStream);
让downloadFile()
将文件写入流中。现在,您可以通过重载write()
的各种版本来包装流并计算写入的字节数。
[编辑] 我看到Services
是RMI代理。在这种情况下,您无法使用上述方法。相反,它变得更复杂:
您的服务器上需要一个下载池(想想“地图”)。该池允许您为每次下载请求另一个数据块。
因此,在您的服务器上,您需要:
byte[] read()
方法。read()
方法返回缓冲区的内容并清除它。在客户端:
read()
的循环。 API类似于read(key)
,服务器在地图中查找密钥,然后在下载对象上调用read()
。