【问题标题】:How to get number of bytes that FileChannel.transferFrom wrote during it's writting如何获取 FileChannel.transferFrom 在写入期间写入的字节数
【发布时间】:2013-11-04 05:01:35
【问题描述】:
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 + "%");
}

抱歉,问题不完整。

【问题讨论】:

    标签: java http file-io


    【解决方案1】:

    API 中所述,您应该写:

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

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

    编辑:

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

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

    【讨论】:

    • 我为我的问题添加更多描述。
    猜你喜欢
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2013-04-18
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多