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実際に転送されたバイト数が含まれます (注: これはゼロの場合もあります)。

編集:

これは OS レベルの機能であるため、クラスtransferFrom()から直接監視することはできません。FileChannel

このSOの回答ReadableByteChannelには、クラスをラップしてread()呼び出しを監視するという良いアプローチがあるようです。

于 2013-11-04T09:13:38.703 に答える