简单的NIO通信模型:实现服务器与客户端通信

NIO:新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的、面向块的 I/O,同时支持阻塞与非阻塞模式

I/O 与 NIO 最重要的区别是数据打包和传输的方式,I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。

·通道channel:对原 I/O 包中的流的模拟,可以通过它读取和写入数据,通道与流的不同之处在于,流只能在一个方向上移动(一个流必须是 InputStream 或者
 OutputStream 的子类),而通道是双向的,可以用于读、写或者同时用于读写。通道包括以下类型:
    |- FileChannel:从文件中读写数据
    |- DatagramChannel:通过 UDP 读写网络中数据
    |- SocketChannel:通过 TCP 读写网络中数据
    |- ServerSocketChannel:可以监听新进来的 TCP 连接,对每一个新进来的连接都会创建一个 SocketChannel
·选择器Selector:NIO 现了IO多路复用中的Reactor模型,一个线程Thread使用一个选择器Selector通过轮询的方式去监听多个通道 Channel 上的事件,从
而让一个线程就可以处理多个事件,通过配置监听的通道Channel为非阻塞,那么当Channel上的IO事件还未到达时,就不会进入阻塞状态一直等待,而
是继续轮询其它Channel,找到IO事件已经到达的Channel执行。因为创建和切换线程的开销很大,因此使用一个线程来处理多个事件而不是一个线程处理一
个事件,对于IO密集型的应用具有很好地性能。

在这里插入图片描述

·缓冲区:提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程,实际是一个数组,类型有ByteBuffer、CharBuffer、ShortBuffer、
 InterBuffer、LongBuffer、FloatBuffer、DoubleBuffer,状态量有:
    |-mark:标记
    |-capacity:最大容量
    |-position:位置
    |-limit:限制
·关系:0 <= 标记 <= 位置 <= 限制 <= 容量
    |-flip()方法:反转,切换读写模式

NIO编程过程

·客户端:
    |-通过SocketChann
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值