Java-nio-channels
提供:Dev Guides
Java NIO-チャンネル
説明
名前が示すように、チャネルは一方から他方へのデータフローの平均として使用されます。ここでは、Java NIOチャネルはバッファと反対側のエンティティの間で同じように動作します。
従来のJava IOチャネルで使用されるストリームとは異なり、読み取りと書き込みの2つの方法があります。JavaNIOチャネルは、ブロックモードと非ブロックモードの両方でデータの非同期フローをサポートします。
チャネルの実装
Java NIOチャネルは、主に次のクラスで実装されます-
- FileChannel -ファイルからデータを読み取るために、ファイルチャネルを使用します。 ファイルチャネルのオブジェクトは、ファイルオブジェクトを直接作成できないため、ファイルオブジェクトでgetChannel()メソッドを呼び出すことによってのみ作成できます。
- DatagramChannel -データグラムチャネルは、UDP(User Datagram Protocol)を介してネットワーク経由でデータを読み書きできます。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!