Java NIO、Reactor、Netty

1.NIO概述

IO分为同步IO和异步IO。
  BIO:同步阻塞IO
  NIO:同步非阻塞IO
  AIO:异步非阻塞IO

  NIO包括:ChannelBufferSelector
  NIO是面向缓冲区的,传统IO是面向流的;传统IO基于字节流、字符流进行操作。NIO基于Channel和Buffer进行操作,数据总是从Channel读到Buffer,从Buffer写到Channel。传统IO是阻塞的,NIO是非阻塞的,实现了异步操作。

2.Channel

Stream是单向的,Channel是双向的。

NIO的Channel有:

  • FileChannel
    FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。(可用于文件复制,速度比流处理快很多。(内存映射机制))
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

注:FileChannel为什么无法设置为非阻塞模式
  源码层:源码中FileChannel类中没有configureBlocking()方法,所以不能设置我非阻塞模式,因此也就无法和Selector配合使用,无法注册Selector。
  其它:Selector的设计理念是,如果打开了多个通道,并且每个通道的流量都很低的时候,使用Selector会很方便,比如QQ,阿里旺旺。而FileChannel一般适用于大文件的复制,流量很大,没有必要设置成非阻塞的。

3.Buffer

NIO中的关键Buffer实现有:ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer,分别对应基本数据类型: byte, char, double, float, int, long, short。当然NIO中还有MappedByteBuffer, HeapByteBuffer, DirectByteBuffer等。

Buffer实际上是一个容器,一个连续数组。

它的位置状态变量有:

  • capacity:缓冲区数组的总长度
  • position:下一个要操作的数据元素的位置
  • limit:缓冲区数组中不可操作的下一个元素的位置:limit<=capacity
  • mark:用于记录当前position的前一个位置或者默认是-1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值