2013-11-04 62 views
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()在寫入文件期間寫入的字節數,將其寫入日誌或寫入控制檯?如何獲取FileChannel.transferFrom在寫入過程中寫入的字節數

像這樣的事情

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

對不起,不完整的問題。

回答

1

正如API描述,你應該寫:

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

然後,bytes將包含實際傳輸的字節數(注:這可能是零)。

編輯:

transferFrom()是操作系統級函數,因此實際上不能直接從FileChannel類監測。

This SO answer似乎有一個很好的方法 - 包裝ReadableByteChannel類監視read()調用。

+0

我爲我的問題添加更多描述。 – Bear0x3f

相關問題