首先我们再来回顾一下 IO 和 NIO 的区别:
- 可简单认为:IO 是面向流的处理,NIO 是面向块(缓冲区)的处理
- 面向流的 I/O 系统一次一个字节地处理数据。
- 一个面向块(缓冲区)的 I/O 系统以块的形式处理数据。
大约 16 分钟
首先我们再来回顾一下 IO 和 NIO 的区别:
Java 的 IO 分为两大类,一类是传统的 IO(Blocking IO),一类是 NIO (New IO)。
传统的 IO 基于字节流和字符流,以阻塞式 IO 操作为主。常用的类有 FileInputStream、FileOutputStream、InputStreamReader、OutputStreamWriter 等。这些类在读写数据时,会导致执行线程阻塞,直到操作完成。
在此之前,我们曾利用 Java 的套接字 Socket 和 ServerSocket 完成网络编程,但 Socket 和 ServerSocket 是基于 Java IO 的,在网络编程方面,性能会比较差。原因我们在之前也讲过。
我花了几天时间去了解NIO 的核心知识,期间看了《Java 编程思想》和《疯狂 Java 讲义》中的 NIO 模块。但是,看完之后还是很迷,不知道 NIO 是干嘛用的,网上的资料和书上的知识点没有很好地对应上。
我这里先给大家展示一副传统 IO 和 NIO 的对比图,感受一下。
上篇,我们了解了 NIO 和传统 IO 的区别,那这篇我们来了解 BIO、NIO 和 AIO 的区别,新手也很容易混淆,我们换一个方式来讲,讲给女朋友听👂。
周末午后,在家里面进行电话面试,我问了面试者几个关于 IO 的问题,其中包括什么是 BIO、NIO 和 AIO?三者有什么区别?具体如何使用等问题,但是面试者回答的并不是很满意。于是我在面试评价中写道:"对 Java 的 IO 提醒理解不够深入"。恰好被女朋友看到了。