Java NIO与IO的详细区别(通俗篇)
来源:互联网 发布:2017耽美网络剧百度云 编辑:程序博客网 时间:2024/05/16 23:43
Java NIO与IO的详细区别(通俗篇)
- 博客分类:
- Java
内核空间、用户空间、计算机体系结构、计算机组成原理、……确实有点儿深奥。
我的新书《代码之谜》会有专门的章节讲解相关知识,现在写个简短的科普文:
就速度来说 CPU > 内存 > 硬盘
I
- 就是从硬盘到内存O
- 就是从内存到硬盘
第一种方式:我从硬盘读取数据,然后程序一直等,数据读完后,继续操作。这种方式是最简单的,叫阻塞IO。
第二种方式:我从硬盘读取数据,然后程序继续向下执行,等数据读取完后,通知当前程序(对硬件来说叫中断,对程序来说叫回调),然后此程序可以立即处理数据,也可以执行完当前操作在读取数据。
在以前的 Java IO 中,都是阻塞式 IO,NIO 引入了非阻塞式 IO。
还有一种就是同步 IO 和异步 IO。经常说的一个术语就是“异步非阻塞”,好象异步和非阻塞是同一回事,这大概是一个误区吧。
至于 Java NIO 的 Selector,在旧的 Java IO 系统中,是基于 Stream 的,即“流”,流式 IO。
当程序从硬盘往内存读取数据的时候,操作系统使用了 2 个“小伎俩”来提高性能,那就是预读,如果我读取了第一扇区的第三磁道的内容,那么你很有可能也会使用第二磁道和第四磁道的内容,所以操作系统会把附近磁道的内容提前读取出来,放在内存中,即缓存。
(PS:以上过程简化了)
通过上面可以看到,操作系统是按块 Block从硬盘拿数据,就如同一个大脸盆,一下子就放入了一盆水。但是,当 Java 使用的时候,旧的 IO 确实基于 流 Stream的,也就是虽然操作系统给我了一脸盆水,但是我得用吸管慢慢喝。
于是,NIO 横空出世。
0 0
- Java NIO与IO的详细区别(通俗篇)
- Java NIO与IO的详细区别(通俗篇)
- Java NIO与IO的详细区别(通俗篇)
- Java NIO与IO的详细区别(通俗篇)
- Java NIO:IO与NIO的区别
- Java NIO:IO与NIO的区别
- Java的NIO与IO的区别
- Java IO与NIO的区别
- Java NIO与IO的主要区别
- Java中 NIO与IO的区别
- Java NIO 与 IO的区别
- Java IO 与NIO的区别
- Java NIO与IO的主要区别
- Java NIO 与 IO之间的区别
- java io与nio的区别
- Java的NIO及与IO区别
- Java的NIO及与IO区别
- java NIO与IO的区别
- JAVA学习笔记(三十八)- 创建实现Runnable接口的线程
- Android Matrix
- poj1131 高精度
- hihocoder#1128之非有序数组二分查找
- vim的命令
- Java NIO与IO的详细区别(通俗篇)
- 常见的网络协议及其所在的层次
- diskpart命令使用详解
- 一个简单的Python MVC框架(4)
- Install Github for windows
- The library '*.jar' contains native libraries that will not run on the device
- 底部菜单栏之Fragment的详细介绍和使用方法
- 比较全面的三层交换机配置实例 转自wzdlssy
- vs2008和vs2010下配置openmesh