IO流和NIO流的区别

IO NIO
面向流编程 面向块(缓冲区)编程
阻塞IO 非阻塞IO
选择器selector

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

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

IO流和NIO流的区别相关推荐

  1. java当中各种流的应用场景_Java中有哪些流,常用流有哪些并有何特点和使用场景 NIO流,特性及使用时注意的事项 IO与NIO区别...

    IO流 流(stream):一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象,对文件中的内容读和写的操作. 及时关闭不使用的流,避免造成资源流失,可能会导致内存溢出 1.数据流向 输入流 ...

  2. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  3. Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  4. Java的IO流 ,BIO NIO AIO 的区别?

    目录 1.在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别: 2.BIO NIO AIO 分别代表什么?(面试简答): 3.BIO和NIO.AIO的区别: 4.java中io流的分类: •  ...

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

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

  6. java基础IO BIO、NIO、AIO的区别

        Java IO(Java数据流)主要就是Java用来读取和输出数据流.它有对应的一系列API.主要是java.io.*,和java.nio.*. Java中IO主要有两类 |-->字节流 ...

  7. 吃透Java IO:字节流、字符流、缓冲流

    IO流是Java中的一个重要构成部分,也是我们经常打交道的. 下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握得很好,可以立即关闭文章.反之,你可以在后面得文章中寻找答案. ...

  8. 【Java网络编程与IO流】Java中IO流分为几种?字符流、字节流、缓冲流、输入流、输出流、节点流、处理流

    Java网络编程与IO流目录: [Java网络编程与IO流]Java中IO流分为几种?字符流.字节流.缓冲流.输入流.输出流.节点流.处理流 [Java网络编程与IO流]计算机网络常见面试题高频核心考 ...

  9. Character流与Byte流的区别

    Character流与Byte流的区别 (2012-09-25 16:15:49) 标签: 杂谈 分类: 大赛指导 Character流与Byte流的区别是 A) 每次读入的字节数不同 B) 前者带有 ...

  10. java byte char io流_吃透Java IO:字节流、字符流、缓冲流

    前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...

最新文章

  1. Android中事件的传递
  2. python tkinter输入框_python TKinter获取文本框内容的方法
  3. opengl加载显示3D模型3d类型文件
  4. bgp 建立邻居发送的报文_大型网络BGP之IBGP和EBGP邻居关系基础配置
  5. UESTC_秋实大哥与花 2015 UESTC Training for Data StructuresProblem B
  6. 智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯
  7. oracle启动限制模式
  8. 实用软件资源下载地址集合
  9. 当不知轴承型号时如何寻找轴承故障频率_趣说滚动轴承的故障诊断
  10. Python的三元运算符
  11. php exec 命令,概述PHP命令行shell_exec()使用
  12. 大学生创新工作室阶段性总结
  13. acme.sh使用阿里云DNS申请Let’s Encrypt的https证书
  14. iOS15绕过激活工具TiggerRamDisk3.4,支持最新iOS15.5绕过
  15. 高级操作!用 Python 在 Excel 里画出蒙娜丽莎
  16. centos7 网桥桥接、网卡绑定终极实战
  17. 关于java8的default关键字浅薄理解
  18. bootstrap学习笔记一: bootstrap初认识,hello bootstrap(下)
  19. 基于Keras实现鸢尾花分类
  20. XBG和LGB和CATBOOST 要用哪一种? 深度分析

热门文章

  1. java 表头固定,网页开发之Bootstrap-table固定表头并解决表头与内容不对齐
  2. 台湾-李宏毅教授的深度学习视频教程
  3. OpenNESS NTS 的前世今生
  4. 计算机ppt咋弄,ppt打不开怎么办?教您详细解决方法
  5. 小鹤输入法及练习工具推荐
  6. C++虚函数及虚函数表(内存分配)简析
  7. DBSCAN聚类算法详解
  8. html倒计时星期日,功能齐全的jQuery倒计时插件
  9. 微信获取当前位置-vue中
  10. 概率论基础知识整理(一)