Java IO与NIO的区别

  • 1. Java IO与NIO概述
  • 2. Java IO与NIO的区别
  • 3. Java NIO 总览

1. Java IO与NIO概述

NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。

NIO和IO的主要区别,下表总结了Java IO和NIO之间的主要区别:

类型 IO NIO
流类型 面向流 面向缓冲
是否阻塞 阻塞IO 非阻塞IO
有无选择器 选择器
真正的了解NIO一定要看Netty,Netty是NIO里用的最好的框架。

2. Java IO与NIO的区别

1、面向流与面向缓冲
  Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,因为它们没有被缓存在任何地方,所以,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。
Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

2、阻塞与非阻塞IO
  Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write() 时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道channel。

3、选择器(Selectors)
  Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

4、NIO和IO适用场景
  NIO是为弥补传统IO的不足而诞生的,但是尺有所短寸有所长,NIO也有缺点,因为NIO是面向缓冲区的操作,每一次的数据处理都是对缓冲区进行的,那么就会有一个问题,在数据处理之前必须要判断缓冲区的数据是否完整或者已经读取完毕,如果没有,假设数据只读取了一部分,那么对不完整的数据处理没有任何意义。所以每次数据处理之前都要检测缓冲区数据。

那么NIO和IO各适用的场景是什么呢?
  如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,这时候用NIO处理数据可能是个很好的选择。
  而如果只有少量的连接,而这些连接每次要发送大量的数据,这时候传统的IO更合适。使用哪种处理数据,需要在数据的响应等待时间和检查缓冲区数据的时间上作比较来权衡选择。

3. Java NIO 总览

Java NIO的三个核心基础组件,Channels、Buffers、Selectors。其余的诸如Pipe,FileLcok都是在使用以上三个核心组件时帮助更好使用的工具类。

Java IO与NIO的区别相关推荐

  1. java io和nio的区别_Java中IO和NIO的本质和区别

    导读热词 简介 终于要写到java中最最让人激动的部分了IO和NIO.IO的全称是input output,是java程序跟外部世界交流的桥梁,IO指的是java.io包中的所有类,他们是从java1 ...

  2. java输入输出流_金九银十准备季:Java异常+Java IO与NIO面试题(含答案)

    写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:abel-max/Java-Study ...

  3. Java NIO:IO与NIO的区别

    一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...

  4. Java与汽车_Java NIO:IO与NIO的区别

    一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...

  5. 详解Java NIO,IO与NIO的区别

    一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...

  6. Java IO BIO NIO

    Java IO BIO NIO 一.Java I/O概述 1.1 什么是流 1.2 流的分类 1.3 字符流 1.3.1 Reader 1.3.2 Writer 1.4 字节流 1.4.1 Input ...

  7. NIO详解(十三):Java IO 和NIO 总结

    1. 概述 下面总结了Java NIO和IO之间的主要差别 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 2. Java IO和 NIO的主要区别 2.1 面向流和面向缓冲区 Ja ...

  8. JAVA IO : BIO NIO AIO

    JAVA IO : BIO NIO AIO 同步异步.阻塞非阻塞概念 同步与异步 阻塞与非阻塞 IO VS NIO VS AIO 面向流与面向缓冲 阻塞与非阻塞IO BIO.NIO.AIO的JAVA实 ...

  9. java.io和util的区别_Java NIO与IO的区别和比较

    Java NIO与IO的区别和比较 导读 J2SE1.4以上版本中发布了全新的I/O类库.本文将通过一些实例来简单介绍NIO库提供的一些新特性:非阻塞I/O,字符转换,缓冲以及通道. 一. 介绍NIO ...

  10. Java IO(BIO, NIO, AIO) 总结

    文章转载自:JavaGuide 目录 BIO,NIO,AIO 总结 同步与异步 阻塞和非阻塞 1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 ...

最新文章

  1. linux账号管理命令,linux账号管理及相关命令和操作
  2. 性能优化之使用LongAdder替换AtomicLong
  3. Python开发Day03
  4. ASP.NET MVC Beta 新特性之 IValueProvider
  5. java正则表达式 文件后缀名_正则表达式 判断文件名后缀是否为 csv xls xlsx
  6. 问题:c语言简单的循环和字符串,错在哪里了?结果怎么是0(已解决)
  7. F5 BIGip 负载均衡 IP算法解密工具
  8. oracle索引有哪些分类,Oracle中的索引分类
  9. html app5 仿微信朋友圈,h5仿微信web版|仿微信电脑客户端|仿微信朋友圈源码
  10. IDEA中TODO的使用、配置和设置TODO过滤器
  11. 什么是运动模糊(Motion Blur)
  12. 用K-means聚类分类不同行业的关税模型
  13. 邓宁-克鲁格效应(Dunning-Kruger effect,达克效应)
  14. 论文解读:NSGA-II, EFR, EFR-RR
  15. 软件测试的36个常用术语
  16. 《惢客创业日记》2020.09.25-26(周五)月饼还能怎么创新?
  17. srcnn fsrcnn espcn rdn超分网络的结构
  18. 制作Hi3519v101根文件系统
  19. CD4541B定时器的使用方法
  20. C类网络子网划分和掩码公式

热门文章

  1. C语言利用指针实现字符串逆序输出
  2. Android 电容屏和电阻屏
  3. VS2017+DirectX9环境配置
  4. micropython支持stm32型号_单片机仿真软件Proteus,可支持程序联调
  5. 剧情插件Cutscene Creator uSequencer 1.3.7.1使用说明二
  6. ghost错误代码大全
  7. 测量学9_计算机地图绘图基础及数字地图中DEM应用
  8. 大地测量学基础 (复习)
  9. 静息态功能磁共振成像中的动态功能连接
  10. 用matlab画指定点与点之间的连线