当前位置: 首页 > news >正文

Java NIO和IO的主要区别

From :http://blog.csdn.net/keda8997110/article/details/19549493

下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。

IO                NIO
面向流            面向缓冲
阻塞IO            非阻塞IO
无                选择器

面向流与面向缓冲

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

阻塞与非阻塞IO

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

选择器(Selectors

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

转载于:https://www.cnblogs.com/geekdc/p/5249494.html

相关文章:

  • hibernate主键生成策略(转载)
  • 微软,苹果,Google用户体验设计原则
  • QT(1)准备好环境和.pro文件
  • QT(2)Widget的小例子
  • Xcode7 添加PCH文件
  • MySQL事务隔离级别详解(转)
  • 登陆的时候如何用单例将用户登录成功后的信息存储下来,并且在其他地方可以使用...
  • linux2.6.36之后对工作队列的改进
  • FPM打包工具
  • 随笔一个dom节点绑定事件
  • 程序员的美:极致与疯狂
  • 大脑暗能量
  • 2013551813 张燕燕 第二周作业
  • 一个7200转/分钟,20G的给力风扇
  • 页面刷新 整个页面刷新和局部刷新
  • 分享的文章《人生如棋》
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • ComponentOne 2017 V2版本正式发布
  • E-HPC支持多队列管理和自动伸缩
  • ES10 特性的完整指南
  • es6--symbol
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • js算法-归并排序(merge_sort)
  • Linux下的乱码问题
  • maven工程打包jar以及java jar命令的classpath使用
  • PAT A1120
  • PHP的Ev教程三(Periodic watcher)
  • tab.js分享及浏览器兼容性问题汇总
  • 基于HAProxy的高性能缓存服务器nuster
  • 记一次和乔布斯合作最难忘的经历
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 如何设计一个比特币钱包服务
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 突破自己的技术思维
  • 写给高年级小学生看的《Bash 指南》
  • 学习ES6 变量的解构赋值
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # 数据结构
  • # 透过事物看本质的能力怎么培养?
  • #100天计划# 2013年9月29日
  • (3)选择元素——(17)练习(Exercises)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (五)网络优化与超参数选择--九五小庞
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)为C# Windows服务添加安装程序
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .gitignore文件—git忽略文件
  • .NET 8.0 发布到 IIS
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...