Java NIO学习记录(一)

1.什么是Java NIO

    java.nio(java non-blocking IO,一说 java new IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。

2.Java NIO的工作原理

    1. 由一个专门的线程来处理所有的 IO 事件,并负责分发。 
    2. 事件驱动机制:事件到的时候触发,而不是同步的去监视事件。 
    3. 线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。 

    Java NIO原理图

    Reactor:反应器模式;

    Dispatch:调度策略;

    每个线程的处理流程大概都是读取数据、解码、计算处理、编码、发送响应;

3.Java NIO的核心部分

  • Channels
  • Buffers
  • Selectors

Channel 和 Buffer 

    基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。这里有个图示: 

e20c73df-9ade-3121-be5f-307e6baf328f.png
    Channel和Buffer有好几种类型。下面是JAVA NIO中的一些主要Channel的实现: 

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

    正如你所看到的,这些通道涵盖了UDP 和 TCP 网络IO,以及文件IO。 
    以下是Java NIO里关键的Buffer实现: 

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

    这些Buffer覆盖了你能通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。 

Selector 

    Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。 

    这是在一个单线程中使用一个Selector处理3个Channel的图示: 

79224e12-3615-3917-9e85-42e7edbd8b40.png



    要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。 

转载于:https://my.oschina.net/u/3195497/blog/864193

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值