NIO初学之NIO(二)

本文介绍了Java NIO中的关键概念:缓冲区(Buffer)用于存储数据,读写时直接操作缓冲;通道(Channel)提供双向数据传输;多路复用器(Selector)能监测多个通道的就绪状态,实现高效率的I/O操作。通过Selector,可以高效地管理多个Channel,提升并发性能。
摘要由CSDN通过智能技术生成

1、缓冲区(Buffer)

 包含一些要写入或者要读出的数据。

NIO中数据都是用缓冲做处理的,在读取数据时,他是直接读到缓存区的;在写入数据时,写入到缓冲区中。

缓冲区实质上就是一个数组,缓冲区提供了对数据的结构化访问以及维护读写位置等信息。(最常用的缓冲区是ByteBuffer)

2、通道Channel

Channel是一个通道,网络数据通过Channel读取和写入。

通道与流的不同之处在于通道是双向的,流只是在一个方向上移动,而通道可以用于读、写或者二者同时进行。

3、多路复用器Selector

多路复用器提供选择一斤就绪的任务的能力。

Selector会不断的轮询注册在其上的Channel,如果某个Channel上面发生读或者写事件,这个Channel就处于就绪状态,会被Selector轮询出来,然后通过SelectionKey可以获取就绪Channel的集合,进行后续的I/O操作。(P48)

public class NioTimeServer {

    public static void main(String[] args) {
        int port = 8080;
        if (args != null && args.length > 0){
            try {
                port = Integer.valueOf(args[0]);
            }catch (NumberFormatException e){

            }
        }
        MultplexerTimeServer timeServer = new MultplexerTimeServer(port);
        new Thread(timeServer,"NIO-MTS-001").start();
    }
}
package buffered.NIO.NIOSection2;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

public class MultplexerTimeServer implements Runnable{

    private Selector selector;

    private ServerSocketChannel serverSocketChannel;

    private volatile boolean stop;

    /*构造方法,资源初始化
    * 创建多路复用器Selector,ServerSockerChannel
    * 将ServerSocketChannel注册到Seletor,监听SelectorKey.OP_ACCOPT操作为
    * 如果资源初始化失败,则退出
    * */
    public MultplexerTimeServer(int port){
        try {
            selector = Selector.open();
            serverSocketChannel = ServerSocketChannel.open();
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值