Java NIO のチャネルはストリームに似ていますが、いくつかの違いがあります:
チャネルからデータを読み取ることも、チャネルにデータを書き込むこともできます。ただし、ストリームの読み取りと書き込みは通常一方向です。
チャネルは非同期で読み書きできます。
チャネル内のデータは、常に最初にバッファから読み取られるか、常にバッファから書き込まれる必要があります。
上で述べたように、データはチャネルからバッファに読み取られ、データはバッファからチャネルに書き込まれます。以下の図に示すように:
これらは、Java NIO の最も重要なチャネルの実装です:
FileChannel
DatagramChannel
SocketChannel
サーバーソケットチャンネル
FileChannel は、ファイルからデータを読み書きします。
DatagramChannel は、UDP を介してネットワーク内のデータを読み書きできます。
SocketChannel は、TCP 経由でネットワーク内のデータを読み書きできます。
ServerSocketChannel は、Web サーバーと同様に、新しい受信 TCP 接続を監視できます。 SocketChannel は、新しい受信接続ごとに作成されます。
以下は、FileChannel を使用してデータをバッファに読み取る例です:
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw"); FileChannel inChannel = aFile.getChannel(); ByteBuffer buf = ByteBuffer.allocate(48); int bytesRead = inChannel.read(buf); while (bytesRead != -1) { System.out.println("Read " + bytesRead); buf.flip(); while(buf.hasRemaining()){ System.out.print((char) buf.get()); } buf.clear(); bytesRead = inChannel.read(buf); } aFile.close();
buf.flip() の呼び出しに注意し、最初にデータをバッファに読み取り、次にバッファを反転します。次にバッファからデータを読み取ります。次のセクションでは、バッファについて詳しく説明します。
関連記事:
Java NIO チュートリアル シリーズ 1: Java NIO の簡単な紹介
Java NIO チュートリアル シリーズ 3: Buffer の基本的な使い方
関連動画:
JDK ダウンロード プロセスの図 - JAVA初歩的な入門ビデオチュートリアル
以上がJava NIO シリーズ チュートリアル 2: Java NIO チャネルはストリームに似ていますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。