JAVAのチャンネルの詳しい説明

怪我咯
リリース: 2017-06-25 10:14:05
オリジナル
2426 人が閲覧しました

注: Concurrent Programming Network – ifeve.com から転載この記事のリンク アドレス:Java NIO チュートリアル シリーズ (2) Channel

Channel

Java NIO チャネルはストリームに似ていますが、多少異なります:

  • チャネルからデータを読み取ることも、チャネルにデータを書き込むこともできます。ただし、ストリームの読み取りと書き込みは通常一方向です。

  • チャネルは非同期で読み書きできます。

  • チャネル内のデータは、常に最初にバッファから読み取るか、常にバッファから書き込む必要があります。

上で述べたように、データはチャネルからバッファに読み取られ、データはバッファからチャネルに書き込まれます。以下の図に示すように:

1. チャネルの実装

これらは Java NIO の最も重要なチャネルの実装です:

  • FileChannel

  • DatagramChannel

  • ソケットチャンネル

  • ServerSocketChannel

FileChannel は、ファイルからデータを読み書きします。

DatagramChannel は、UDP を介してネットワーク内のデータを読み書きできます。

SocketChannel は、TCP 経由でネットワーク内のデータを読み書きできます。

ServerSocketChannel は、Web サーバーと同様に、新しい受信 TCP 接続を監視できます。 SocketChannel は、新しい受信接続ごとに作成されます。

2. 基本的なチャネルの例

以下は、FileChannel を使用してデータをバッファに読み取る例です:

public class Channel1 {public static void main(String[] args) {try {
            RandomAccessFile raf = new RandomAccessFile("./.gitignore","rw");
            FileChannel channel = raf.getChannel();     //获取通道ByteBuffer bf = ByteBuffer.allocate(50);    //通过静态allocate方法创建一个缓冲区,容量为50byte[] bytes = new byte[]{};
            bytes = "123".getBytes();
            bf = ByteBuffer.wrap(bytes);                //通过静态wrap方法,byte数组生成缓冲区,缓冲区中保留了原数据while(bf.hasRemaining()){
                System.out.print((char) bf.get());
            }int bytesRead ;while ((bytesRead = channel.read(bf)) != -1) {      //将通道中的数据写入缓冲区,并判断通道中的数据是否到末尾System.out.println("Read " + bytesRead);bf.flip();                                      //反转缓冲区 实际上就是将position置为0 后续buffer详细介绍while(bf.hasRemaining()){                       //判断缓冲区中是否还有值System.out.print((char) bf.get());          //输出缓冲区中的值                }
                bf.clear();                                     //清理缓冲区            }
            raf.close();                                        //关闭RandomAccessFile} catch (IOException e) {
            e.printStackTrace();
        }
    }
}
ログイン後にコピー

buf.flip() の呼び出しに注意してください、最初にデータを読み取りますBuffer にデータを読み込み、次に Buffer を反転して、Buffer からデータを読み取ります。次のセクションでは、Buffer について詳しく説明します

以上がJAVAのチャンネルの詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!