JavaNIO-チャネル

説明

名前が示すように、チャネルは一方の端からもう一方の端へのデータフローの平均として使用されます。ここでは、Java NIOチャネルは、バッファともう一方の端のエンティティ間で同じように機能します。つまり、チャネルは、バッファへのデータの読み取りと、バッファからのデータの書き込みに使用されます。

従来のJavaIOチャネルで使用されるストリームとは異なり、読み取りと書き込みの2つの方法があります。JavaNIOチャネルは、ブロッキングモードと非ブロッキングモードの両方でデータの非同期フローをサポートします。

チャネルの実装

Java NIOチャネルは、主に次のクラスで実装されます-

  • FileChannel−ファイルからデータを読み取るために、ファイルチャネルを使用します。ファイルオブジェクトを直接作成することはできないため、ファイルチャネルのオブジェクトは、ファイルオブジェクトに対してgetChannel()メソッドを呼び出すことによってのみ作成できます。

  • DatagramChannel −データグラムチャネルは、UDP(ユーザーデータグラムプロトコル)を介してネットワーク経由でデータを読み書きできます。DataGramchannelのオブジェクトは、ファクトリメソッドを使用して作成できます。

  • SocketChannel− SocketChannelチャネルは、TCP(Transmission Control Protocol)を介してネットワーク経由でデータを読み書きできます。また、ファクトリメソッドを使用して新しいオブジェクトを作成します。

  • ServerSocketChannel− ServerSocketChannelは、Webサーバーと同じように、TCP接続を介してデータを読み書きします。着信接続ごとに、SocketChannelが作成されます。

次の例は、からのテキストファイルから読み取ります C:/Test/temp.txt コンテンツをコンソールに出力します。

temp.txt

Hello World!

ChannelDemo.java

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ChannelDemo {
   public static void main(String args[]) throws IOException {
      RandomAccessFile file = new RandomAccessFile("C:/Test/temp.txt", "r");
      FileChannel fileChannel = file.getChannel();
      ByteBuffer byteBuffer = ByteBuffer.allocate(512);
      while (fileChannel.read(byteBuffer) > 0) {
         // flip the buffer to prepare for get operation
         byteBuffer.flip();
         while (byteBuffer.hasRemaining()) {
            System.out.print((char) byteBuffer.get());
         }
      }
      file.close();
   }
}

出力

Hello World!