Java NIO

Java NIO基本介绍

  • Java NIO 是java1.4版本引入的新的IOAPI,可以替代标准的java IO API .NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的,基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。NIO可以理解为非阻塞IO,传统的IO的read和write只能阻塞执行,线程在读写IO期间不能干其他事情,比如调用socket.read()时,如果一直没有数据传过来,线程就会一直阻塞,而NIO可以配置socket为非阻塞模式。
  • NIO相关类都被放在Java,nio包及子包下,并且对原Java,io包中的很多类进行改写。
  • NIO三大核心部分 Channel(通道),Buffer(缓冲区),Selector(选择器)
  • JavaNIO的非阻塞模式,使一个线程从某通道发送请求或者读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变得可以读取之前,该线程可以继续做其他的事情,非阻塞写也是如此,一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程可以去做别的事情。
  • 通俗理解,NIO是可以做到用一个线程来处理多个操作的。假设有1000个请求过来,根据实际情况,可以分配20或者80个线程来处理。不像之前的阻塞IO那样,非得分配1000个

NIO三大核心原理

NIO有三大核心部分Channel(通道)、Buffer(缓冲区)、Selector(选择器)
Buffer缓冲区
缓冲区本质上是一块可以写入数据,也可以从中读取数据的内存,这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问这块内存。相比直接对数组的操作,Buffer API更加容易操作和管理
Channel(通道)
Java NIO的通道类似流,但又有所不同,既可以从通道中读取数据,又可以写数据到通道,单流的读写通常是单向的,通道可以非阻塞读取和写入融到,通道可以支持读取或写入缓冲区,也支持异步地读写。
Selector选择器
Selector是一个JavaNIO组件,可以能够检查一个或多个NIO通道,并确定哪组通道已经准备好进行读取或写入,这样一个单独的线程可以管理多个Channel,从而管理多个网络连接,提高效率

  • 每个Channel都会对应一个Buffer
  • 一个线程对应Selector ,一个Selector对应多个Channel
  • 程序切换到那个Channel是由事件决定的
  • Selector会根据不同的事件,在各个通道上切换
  • Buffer是一个内存块,底层是一个数组
  • 数据的读取写入是通过Buffer完成的BIO中要么是输入流要么是输出流,不能双向,但是NIO的Buffer既可以是读也可以写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值