Java_NIO

JAVA NIO

nio 类图

主要组件

  • Channels
    • 连接支持非阻塞IO的读/写的通道
  • Buffers
    • Channels通道直接用来进行读/写操作的类数组对象
    • 分配对外内,外设读取加速
  • Selectors
    • 能知道哪些Channels通道集合存在IO事件
  • SelectionKeys
    • 提供IO事件状态信息和IO事件绑定功能的类

NIO基本结构

  • 1 。 服务端:
    • 创建一个 Selector,注册对各种 I/O 事件的兴趣的地方,而且当那些事件发生时,就是这个对象告诉您所发生的事件。
    • 服务端socketChannel,ServerSocketChannel打开ServerSocket
    • ServerSocket绑定地址
    • ServerSocketChannel在Selector注册监听accept事件
    • 调用 Selector 的 select() 方法。这个方法会阻塞,直到至少有一个已注册的事件发生。
      • 客户端SocketChannel调用connect到服务端地址时,出发OP_ACCEPT事件,阻塞结束,开始处理事件
        • 通过select的selectedKeys获取SelectionKey的集合,检查key的状态,从key中获取ServerSocketChannel
        • 从ServerSocketChannel中获取与客户端的SocketChannel,ssc2.accept()
        • 将与客户端的SocketChannel注册OP_READ,监听与客户端连接的READ事件,可以处理 客户端写入的信息
  • 2 。 客户端:
    • 打开SocketChannel,连接指定服务地址
    • 打开Selector,并注册OP_CONNECT和OP_READ事件,处理连接和读取事件
    • selector.select()阻塞等待事件发生
      • 连接完成
      • 服务段发送信息,从key中获取SocketChannel,读取服务端信息,和写入信息给服务端

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值