Java NIO 之 NIO 简介

    Java NIO 全称 Java non-blocking IO,是jdk1.4之后推出的new IO api,为所有的原始类型(boolean除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。

    Java NIO 由三个核心部分组成:

  • Buffers         缓冲区
  • Channels     通道
  • Selectors     选择器
     其中,Channels对应之前IO中的流,Buffer是Channels两端的缓冲区,Selectors是因为nio可以使用同步的非阻塞方式而加入的东西。以前所有的流都是阻塞的,一个线程只要对其操作,其他操作就会被阻塞,相当于一个没有水管的阀门,当你伸手接水时,不管水到没到,你只能等水出来并流完。
    而nio中,Channels的加入,相当于增加了有阀门的水龙头,虽然一个时刻只能接一个水管的水,但依赖轮换策略,在水量不大的时候,各个水管里流出来的水都可以依次接到,这里的关键之处就是增加了Selectors作为接水工。它负责协调,切换水管。
    当我们需要用水的时候,就实现提了一个水桶给接水工,这个水桶就是Buffers。也就是,我们不需要阻塞在等水这个操作上,而是让别人去做(另一个线程中的接水工),等水满了,接水工会通知我们。

Channel 和 Buffer

    基本上,所有的NOI都是从Channel开始,Channel类似于流。数据可以从Channel读到Buffer中,也可以从Buffer写到Channel中。在nio包中,主要有以下几种Channel实现:
  • FileChannel                         文件IO
  • DatagramChannel               UDP的IO
  • SocketChannel                    套接字的IO
  • ServerSocketChannel         服务器端套接字的IO
    这些通道涵盖了文件IO、UDP和TCP的网络IO。
    以下是Java NIO中主要Buffer的实现:
  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer
    涵盖了除了boolean之外的所有基本数据类型。此外,还有个 Mappedyteuffer,用于表示内存映射文件。

Selector

    Selector允许单线程处理多个Channel,如果你的应用打开了多个通道,但每个流量都很低,使用Selector就会很方便。只需要向Selector注册Channel,然后调用select()方法,这个方法会一直阻塞到注册的通道有你所感兴趣的事件就绪。一旦这个方法返回,线程就可以处理这些事件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值