【发布时间】:2013-07-11 10:05:05
【问题描述】:
例如,
Channels.newChannel(url.openStream());
这一行打开流并从中获取数据,但我无法找到它的进度。
有办法吗?
【问题讨论】:
标签: java url httpurlconnection
例如,
Channels.newChannel(url.openStream());
这一行打开流并从中获取数据,但我无法找到它的进度。
有办法吗?
【问题讨论】:
标签: java url httpurlconnection
这一行打开流并从中获取数据
不,直到你 .read() 从它那里。所以……
有办法吗?
是的,有。你.read(buf) 其中buf 是ByteBuffer。
只需抓住该缓冲区的.position()。
(注意Channels.newChannel(InputStream) 不会返回FileChannel,而是ReadableByteChannel)
【讨论】:
当使用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);
}
【讨论】: