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