0
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
ReadableByteChannel rbc = Channels.newChannel(conn.getInputStream());   
FileOutputStream fos = new FileOutputStream(fileName);
FileChannel fch = fos.getChannel();
fch.transferFrom(rbc, 0, Long.MAX_VALUE);

我调试了它,下载完成后到达下一行代码。如何获取在transferFrom()写入文件、将其写入日志或控制台期间写入的字节数?

像这样的东西

while (len = fch.getWriteBytes()) {
 System.out.println(len + " bytes : " + (len/total)*100 + "%");
}

抱歉,问题不完整。

4

1 回答 1

1

API中所述,您应该编写:

long bytes = fch.transferFrom(rbc, 0, Long.MAX_VALUE);

然后,bytes将包含实际传输的字节数(注意:这可以为零)。

编辑:

transferFrom()是一个操作系统级别的函数,因此不能真正从FileChannel类中直接监控。

这个 SO 答案似乎有一个很好的方法 - 包装ReadableByteChannel类来监视read()调用。

于 2013-11-04T09:13:38.703 回答