例如,
Channels.newChannel(url.openStream());
这一行打开流并从中获取数据,但我无法找到它的进度。
有办法吗?
答案 0 :(得分:1)
这一行打开流并从中获取数据
不,直到你.read()
才会这样做。因此...
有办法吗?
是的。 .read(buf)
buf
为ByteBuffer
的{{1}}。
抓住缓冲区的.position()
。
(并注意Channels.newChannel(InputStream)
不会返回FileChannel
而是ReadableByteChannel
)
答案 1 :(得分:1)
使用transferFrom()
或transferTo()
方法时,您必须传递文件中的起始点以及要传输的字节数。
你可以做的是将文件分解成100个“部分”。这很简单:
File f = new File(url);
int size = f.length();
假设我们的文件大小为100KB,那么现在大小为102400。 只需将其除以“部分”的数量(本例中为100),每个“部分”就有1024个字节。现在我们要做的就是显示我们已经转移过的“部分”的百分比。
作为例子
int pos = 0;
for(int x = 0 ; x < 100 /*amount of parts*/ ; x++) {
source.transferTo(0*x, 1024 /*part size*/, destination);
progress.setValue(x/100 /*amount of parts*/ *100);
}