NIO笔记

NIO与IO的主要区别

  • IO面向流单向传输、NIO面向缓冲区双向传输;
  • IO阻塞、NIO非阻塞;
  • 网络编程NIO多了个选择器
    传统io模型的缺点
    传统io单线程模型:如果线程未完成数据处理,新的请求将阻塞;
    传统io多线程模型:每个请求都会新启一个线程,阻塞的线程依旧不能做其它事情,cpu利用率仍然不高;

缓冲区(Buffer)

  • Buffer 主要用于与NIO 通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道中的。
  • 一个用于特定基本数据类型的容器,Buffer 就像一个数组,可以保存多个相同类型的数据
  • Buffer主要参数:容量(capacity)、限制(limit)、位置(position)、标记(mark)、重置(reset)
  • 0<=mark<=position<=limit<=capacity

Buffer常见数据类型

  • ByteBuffer
  • CharBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer

直接缓冲区与非直接缓冲区

  • 直接缓冲区:通过 allocateDirect() 方法分配直接缓冲区,将缓冲区建立在物理内存中。可以提高效率
  • 非直接缓冲区:通过 allocate() 方法分配缓冲区,将缓冲区建立在 JVM 的内存中

通道(Channel)

  • 用于源节点与目标节点的连接,负责缓冲区中数据的传输,Channel 本身不存储数据,因此需要配合缓冲区进行传输;
  • 通道的主要实现类

*java.nio.channels.Channel接口:

  •   |--SelectableChannel
        |--SocketChannel
        |--ServerSocketChannel
        |--DatagramChannel
    
      |--Pipe.SinkChannel
      |--Pipe.SourceChannel
    

使用 NIO 完成网络通信的三个核心

  • 通道(Channel):负责连接
  • 缓冲区(Buffer):负责数据的存取
  • 选择器(Selector):是 SelectableChannel 的多路复用器。用于监控 SelectableChannel 的 IO 状况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值