NIO学習ノート2(Channels)
1450 ワード
この章では主にNIOのChannelsについて説明する.
1、ChannelsとIO Streamの違い.
主な違いは以下の通りです. Channelsは双方向であり、同時にデータの読み取りと書き込みをサポートする.IO Streamは一方向で、読むか書くかです. Channelsは非ブロックであり、読み書きは非同期をサポートする.IO Streamはブロックされています. ChannelはBufferにデータを読み込み、BufferからChannelにデータを書き込む.
2、チャンネルは主に実現する.
主な実装クラスは次のとおりです. FileChannel:ファイルからのデータの読み書きをサポートします. DatagramChannel:UDPプロトコルからのデータの読み書きをサポートします. SocketChannel:TCPプロトコルからのデータの読み書きをサポートします. ServerSocketChannel:すべてのTCPリクエスト接続をリスニングします.接続に成功すると、SocketChannelが作成されます.
3、チャンネルの簡単な例.
次に、Channelを使用してファイルの内容を読み込む簡単な例を示します.
1、ChannelsとIO Streamの違い.
主な違いは以下の通りです.
2、チャンネルは主に実現する.
主な実装クラスは次のとおりです.
3、チャンネルの簡単な例.
次に、Channelを使用してファイルの内容を読み込む簡単な例を示します.
public static void readFile(String filePath) throws IOException {
//get FileChannel
RandomAccessFile aFile = new RandomAccessFile(filePath, "rw");
FileChannel inChannel = aFile.getChannel();
//initial ByteBuffer。
ByteBuffer buf = ByteBuffer.allocate(48);
//read data into Buffer
int bytesRead = inChannel.read(buf);
while (bytesRead != -1) {
System.out.println("Read " + bytesRead);
buf.flip();
//read data from Buffer。
while(buf.hasRemaining()){
System.out.print((char) buf.get());
}
buf.clear();
bytesRead = inChannel.read(buf);
}
aFile.close();
}