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等操作

本质上就是利用了事件回调,减少了轮询机制

发表评论

邮箱地址不会被公开。 必填项已用*标注