二、チャンネル
1432 ワード
Java NIOのチャネルはストリームに似ていますが、いくつかの違いがあります.は、チャネルからデータを読み出すこともできるし、チャネルにデータを書き込むこともできる.しかし、ストリームの読み取りは通常一方向である. チャネルは、 を非同期で読み書きすることができる.チャネルのデータは、常に1つのBufferに読み出されるか、または常に1つのBufferから書き込まれる.
チャンネルの実装
次はNIOにおける重要なチャネル実装である.
FileChannelファイルからデータを読み込む DatagramChannel UDP読み書きネットワークのデータ を介して SocketChannelは、TCPを介してネットワーク内のデータ を読み出す. ServerSocketChannelはTCP接続を傍受し、新しく入ってきた接続に対してSocketChannelを作成します.
基本的なチャンネルの例
注意flip()の呼び出しは,まずBufferにデータを読み出し,次にBufferを反転し,次にBufferからデータを読み出す.
チャンネルの実装
次はNIOにおける重要なチャネル実装である.
FileChannelファイルからデータを読み込む
基本的なチャンネルの例
package nio;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class channel {
void cha() throws IOException{
RandomAccessFile aFile = new RandomAccessFile("d:/date/nio.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();
}
public static void main(String[] args) {
channel s= new channel();
try {
s.cha();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意flip()の呼び出しは,まずBufferにデータを読み出し,次にBufferを反転し,次にBufferからデータを読み出す.