IO是软件开发的核心部分,Java的IO是具有不同IO抽象模型的
IO是指的是网络编程 文件操作一个大范围的概念问题
传统的IO是我们常指的同步阻塞式的IO,在完成对应的操作之前,线程会一直阻塞住,依赖顺序调用
代码相对简单,但是IO的效率低下,是现有的局限性,容易成为瓶颈
后来引入了NIO机制,提供了Channel Selector Buffer等新的抽象,构建同步非阻塞的IO性能,提供更加高性能的数据操控方式
之后又引入了NIO2 异步的非阻塞的线程,基于事件和回调,进行非阻塞的调用
同步是一种非常可靠的实现机制,进行同步操作的时候,后续会进行等待,异步则不需要,通常通过事件回调来进行保证任务顺序
阻塞和非阻塞则是,根据是否具有阻塞式的操作,来保证是否进行下一步的操作
而常见的BIO中,可以分为
InputStream/OutputStream 读入写入字节的,操作图片文件
Reader/Writer用于操作字符,增加了字符的编解码功能,适用于读取读取文本信息
BufferedOutputStream带有缓冲区,避免频繁读写磁盘
常见类如下
对于NIO,则是由Buffer Channel Selector实现的
NIO的场景,则常见于服务器应用,可以同时服务于多个客户端请求
毕竟原本的Java如果不使用多路IO复用,那么Java会为每一个连接创建一个线程,或者呢,使用线程池,但线程上下文切换的成本不可避免
NIO利用了单线程轮询事件的机制,高效的定位就绪的Channel,决定做什么
在select中阻塞,避免其他问题
后来呢,Java7引入了NIO2,增加了新的异步模式,事件和回调,处理Accept Read等操作
本质上就是利用了事件回调,减少了轮询机制