目录
前段时间在面试的时候,和面试官探讨一个I/O处理数据慢的问题,所以想到了写这篇文章整理一下NIO和I/O。
I - 就是从硬盘到内存
O - 就是从内存到硬盘
什么是NIO
NIO是在Java1.4中提出的,是面向块的I/O系统,既是系统以块的方式处理数据,每个操作在一步中生产或消费一个数据库,这种处理方式比按照字节处理数据的I/O快很多,而NIO 引入了非阻塞式 IO。
NIO工作原理
1、由一个专门的线程来处理所有的IO事件,并负责分发。
2、事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
3、线程通讯:线程之间通过wait,notify等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换。
什么是I/O
很多时候我们都是用这种I/O系统来处理数据流问题,这是在Java1.4之前的版本就提出了的阻塞式 IO,其提供的是面向流的I/O系统,系统每次一个字节的处理数据,一个输入流产生一个字节的数据,而一个输出流消费一个字节的数据,但是这种面向流的I/O速度很慢。