1

例如,

Channels.newChannel(url.openStream());

这一行打开流并从中获取数据,但我无法找到它的进度。

有没有办法这样做?

4

2 回答 2

1

使用transferFrom()ortransferTo()方法时,您必须传递文件内的起点,以及要传输的字节数。

您可以做的是将文件分解为 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);
}
于 2013-07-11T10:26:41.060 回答
1

这一行打开流并从中获取数据

不,它不会,直到你.read()从它。所以...

有没有办法这样做?

就在这里。你在.read(buf)哪里。bufByteBuffer

只需抓住那个缓冲区的.position().

(并注意Channels.newChannel(InputStream)不会返回 aFileChannel而是 a ReadableByteChannel

于 2013-07-11T10:17:14.057 回答