您的位置:首页 > 编程语言 > Java开发

NIO边看边记 之 channel(二)

2016-05-04 20:57 686 查看
通道channel就像流。通道中的数据总是先读到到buffer中(对于buffer来说是一个写操作),再从buffer中写到另一个通道总(相对于buffer来说是一个读操作)。



Channel主要分为两类:文件channel和网络channel,细分为4种。

FileChanel:从普通文件中读写数据

DatagramChannel:通过UDP读写网络中的数据

SocketChannel:通过TCP读写网络中的数据

ServerSocketChannel:监听新进来的TCP连接,对每个新进来的连接都创建一个SocketChannel

其中FileChannel不可以切换到非阻塞模式,不能应用到selector中。而所有套接字channel都可以应用到非阻塞模式

示例代码如下:

public static void main(String[] args) {
try {
//获取maven工程的resource的路径,这个获得的是绝对路径
String path = FileChannelTest.class.getResource("/").getPath();
//文件存放在resource目录下
String file = "data.txt";
RandomAccessFile randomAccessFile = new RandomAccessFile(path + file, "rw");
//创建channel
FileChannel fileChannel = randomAccessFile.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate(5000);
//从channel中读取数据到buffer
int byteRead = fileChannel.read(byteBuffer);
while (byteRead != -1) {
byteBuffer.flip();
while (byteBuffer.hasRemaining()) {
System.out.println((char)byteBuffer.get());
}
byteBuffer.clear();
byteRead = fileChannel.read(byteBuffer);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java nio channel