Java.nio(Java non-blocking IO)(部分)

1,概述
-java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO)
-nio和io作用是一样的,但是使用方式有很大区别
-nio面向缓冲区,基于通道的io操作,效率更高,非阻塞式,有选择器
-io面向流,阻塞式

2,阻塞式和非阻塞式
 io的各种流是阻塞的,就是当一个线程调用读写方法时,该线程会被阻塞,
 直到读写完,在这期间该线程不能干其他事,CPU转而去处理其他线程,
 假如一个线程监听一个端口,一天只会有几次请求进来,
 但是CPU却不得不为该线程不断的做上下文切换,并且大部分切换以阻塞告终。

 NIO通讯是将整个任务切换成许多小任务,
 由一个线程负责处理所有io事件,并负责分发。
 它是利用事件驱动机制,而不是监听机制,事件到的时候再触发,
 NIO线程之间通过wait,notify等方式通讯。
 保证了每次上下文切换都有意义,减少无谓的进程切换。 
 
3,java nio和核心在于:通道Channel   缓冲区 Buffer
-通道:表示的是2端的一个链接。(表示打开到io设备的链接)
-缓冲区:用于存取数据的容器
-简单的说,channel负责传输  buffer负责存取
4,缓冲区 Buffer
-用于特定原始类型的数据的容器。 是一个抽象类
    所有具体的缓冲区都是该类的子类
    和通道进行交互,数据从通道读进缓冲区,从缓冲区写入通道的
-方法:
    int capacity() 
    返回此缓冲区的容量。  
    Buffer clear() 
    清除此缓冲区。  
    Buffer flip() 
    翻转这个缓冲区。 
    int limit() 
    返回此缓冲区的限制。  
    Buffer mark() 
    将此缓冲区的标记设置在其位置。  
    int position() 
    返回此缓冲区的位置。  
    Buffer reset() 
    将此缓冲区的位置重置为先前标记的位置。  
    Buffer rewind() 
    倒带这个缓冲区。

/*
* 这些缓冲区的使用方式基本一致,获取方式都一样
     *  static ByteBuffer allocate(int capacity)
         分配一个新的字节缓冲区。
     缓冲区中有2个最主要的方法:
     *  get()  获取缓冲区中数据
     *  put()  给缓冲区中存数据
     *
     缓冲区中的核心属性:
     *  capacity  容量,表示缓冲区最大存储的数据个数,一旦声明不能改变
     *  limit   界限,表示缓冲区中可以操作的数据的大小,limit后不能进行读写
     *  position  位置,表示当前在缓冲区中正在操作的数据的位置
     *  mark  标记,记录当前position的位置,使用reset方法可以回到mark位置
* */

Demo

 Result code

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ww^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值