如何获取FileChannel.transferFrom在写入期间写入的字节数

时间:2013-11-04 05:01:35

标签: java http file-io

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 + "%");
}

抱歉问题不完整。

1 个答案:

答案 0 :(得分:1)

API中所述,您应该写:

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

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

修改

transferFrom()是一个操作系统级别的函数,因此无法直接从FileChannel类进行监控。

This SO answer似乎有一个很好的方法 - 包装ReadableByteChannel类来监控read()调用。