引言

Java NIO (New IO,或Non Blocking IO) 是从Java1.4 版本开始引入的一个新的 IO API可以代替标准的Java IO API。

NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同。

NIO支持面向缓冲区、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。

一、NIO 与 IO 的主要区别

IO NIO
面向流(Stream Oriented) 面向缓冲区(Buffer Oriented)
阻塞IO(Blocking IO) 非阻塞IO(Non-Blocking IO)
选择器(Selectors)

面向流指的是输入输出是基于“流”的概念,而且,流是单向的,不管输入还是输出都必须使用对应的输入流和输出流。流的本身也是数据在传输当中的一种抽象形式。

在NIO 中有通道(channel)的概念,是输出端和输入端之间的桥梁。虽然流也有类似的含义,但是不同的是,通道仅仅作为连接,本身不包含任何数据。与之进行配合使用的是缓冲区(Buffer)。如果把通道理解为铁路,那么缓冲区就可以是火车。NIO中的“通道 + 缓冲区”的组合可以完成双向传输的目的。

阻塞与非阻塞、选择器都是针对网络通信而言的。后面的网络通讯会详细讲解。

二、通道(Channel)和缓冲区(Buffer)

Java NIO 系统的核心在于:通道和缓冲区。

通道表示打开到IO 设备(文件、套接字)的连接。若需要使用NIO 系统,就必须要获取连接 IO 设备的通道以及用于容纳数据的缓冲区,然后操作缓冲区,对数据进行操作。

简而言之,Channel 负责传输, Buffer 负责存储。

Java NIO————NIO 简介相关推荐

  1. java aio nio bio_3. 彤哥说netty系列之Java BIO NIO AIO进化史

    你好,我是彤哥,本篇是netty系列的第三篇. 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识. 简介 上一章我们介绍了IO的五种模型,实际上Java只支持其中的三种,即BIO/NIO/ ...

  2. Java中nio、bio和aio的区别

    前言:IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO.现在使用NIO的场景越来越多,很多网上的技术框架或多或少用到了NIO技术,譬如Tomcat.Jetty,还有基于 ...

  3. 整理自《Pro Java 7 NIO.2》

     http://developer.51cto.com/art/200911/165703.htm http://developer.51cto.com/art/201112/307728.htm ...

  4. 理解Java的NIO

    同步与阻塞 同步和异步是针对应用程序和内核的交互而言的. 同步:执行一个操作之后,进程触发IO操作并等待(阻塞)或者轮询的去查看IO的操作(非阻塞)是否完成,等待结果,然后才继续执行后续的操作. 异步 ...

  5. 【Java】NIO中Selector的select方法源码分析

    该篇博客的有些内容和在之前介绍过了,在这里再次涉及到的就不详细说了,如果有不理解请看[Java]NIO中Channel的注册源码分析, [Java]NIO中Selector的创建源码分析 Select ...

  6. java之NIO(Channel,Buffer,Selector)

    java之NIO 1 什么是NIO Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API.NIO支持面向缓冲区的.基于通道的IO操作 ...

  7. java中nio流_Java输入输出流IO介绍(与NIO比较)

    一.Java中流的类型 根据流的方向划分:输入流,输出流 根据流的传输单位:字节流,字符流 根据流的角色划分:节点流,处理流 节点流:直接连接数据源的流 处理流:通过构造方法接收一个节点流,对节点流使 ...

  8. java BIO/NIO/AIO 学习

    参考地址 https://www.cnblogs.com/diegodu/p/6823855.html 一.了解Unix网络编程5种I/O模型 1.1.阻塞式I/O模型 阻塞I/O(blocking ...

  9. JAVA之NIO按行读写大文件,完美解决中文乱码问题

    JAVA之NIO按行读写大文件,完美解决中文乱码问题 参考文章: (1)JAVA之NIO按行读写大文件,完美解决中文乱码问题 (2)https://www.cnblogs.com/jpfss/p/89 ...

  10. 【IO专栏】Java OIO NIO通信对比分析【002】

    在1.4版本之前,Java IO类库是阻塞IO:从1.4版本开始,引入了新的异步IO库,被称为Java new IO 类库,new IO 类库的目标,就是要让Java支持非阻塞IO,基于这个原因更多人 ...

最新文章

  1. TensorFlow数据读取方式:Dataset API,以及如何查看dataset:DatasetV1Adapter的方法
  2. Ansible5:Ad-hoc常用模块
  3. BZOJ3246 IOI2013Dreaming
  4. python init方法是不是私有方法_为什么Python的“私有”方法实际上不是私有的?...
  5. Python之禅 by Tim Peters
  6. oracle中schema指的是什么?
  7. 获取request中的查询参数
  8. 深度好文:2018 年 NLP 应用和商业化调查报告
  9. phpdesigner8 php7.0,大家千万别用PHPDesigner8 的项目替换,多说是泪,改整个站点中!
  10. 参数初始化策略中提到的零空间理解
  11. oracle日期时间
  12. ngrok技术原理及下载使用
  13. 关于计算机技术职业资格那些事
  14. MOOC 研究生学术与职业素养 课后答案
  15. @JSONField的一些使用基础
  16. python打印输出如下图形_python题目要求:输出如下图片中的图形
  17. 架构师必备!15个经典面试问题及回答思路
  18. 设置cpolar远程访问本地网页
  19. 【爬虫】如何通过爬虫,爬取百度图片?新手小白一看便会,内附超详细代码讲解
  20. 完美配色排版海报模板|神奇的色彩搭配

热门文章

  1. 软件工程 质量问题_软件质量| 软件工程
  2. java bitset_Java BitSet nextSetBit()方法与示例
  3. 加餐:Redis 的可视化管理工具
  4. Linux利用nginx-gridfs搭建部署Nginx和MongoDB文件服务器,支持用户密码验证!
  5. LeetCode450题—— 删除二叉搜索树中的节点
  6. 用FileZilla Server搭建ftp服务器
  7. html里面怎么ul加高度,div里面嵌套了ul,为什么div的高度小于ul高度
  8. 大学生体测成绩判断c语言_体育改革瞄准高校,体测不过关可能真的毕不了业了...
  9. tf.contrib在tf2中无法使用
  10. java代码修改触发编译_gcc -O0仍然优化了“未使用”的代码 . 是否有一个编译标志来改变它?...