ホームページ  >  記事  >  Java  >  JAVAにおけるチャネル間のデータ伝送方法の説明

JAVAにおけるチャネル間のデータ伝送方法の説明

巴扎黑
巴扎黑オリジナル
2017-06-26 09:21:011487ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。