Java NIO では、2 つのチャネルのうちの 1 つが FileChannel の場合、1 つのチャネル (翻訳者注: チャネルは中国語でチャネルと訳されることがよくあります) から別のチャネルにデータを直接転送できます。
transferFrom(): 受動的受信
FileChannel の transferFrom() メソッドは、ソース チャネルから FileChannel にデータを転送できます (翻訳者注: このメソッドは、JDK ドキュメントでは、指定された利用可能な読み取りバイト チャネルからバイトを転送するものとして説明されています)このチャンネルのファイル)。
メソッドの入力パラメータのpositionは、その位置からターゲットファイルへのデータの書き込みを開始することを示し、countは転送される最大バイト数を示します。ソース チャネルの残りスペースが count バイト未満の場合、転送されるバイト数は要求されたバイト数よりも少なくなります。
さらに、SoketChannel の実装では、SocketChannel は現時点で準備されているデータ (count バイト未満の可能性があります) のみを送信することに注意してください。したがって、SocketChannel は、要求されたデータ (カウント バイト) のすべてを FileChannel に転送できない場合があります。
transferTo():
transferTo() メソッドをアクティブに送信して、FileChannel から他のチャネルにデータを転送します。以下は簡単な例です:
メソッドを呼び出す FileChannel オブジェクトが異なることを除いて、その他はすべて同じです。
SocketChannel に関する上記の問題は、transferTo() メソッドにも存在します。 SocketChannel は、ターゲット バッファがいっぱいになるまでデータを送信し続けます。
例:
@Testpublic void test2() { RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw"); FileChannel fromChannel = fromFile.getChannel(); RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw"); FileChannel toChannel = toFile.getChannel();long position = 0;long count = fromChannel.size();//从from 读到 本通道;注意socketfrom只会发送已经准备好的,不会发送count个 toChannel.transferFrom(fromChannel,position, count);//将本通道 写到 to;注意sockedfrom会一直发送,直到to被填满 fromChannel.transferTo(position, count, toChannel); }
以上がJAVAにおけるチャネル間のデータ伝送方法の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。