【486、熟悉IO么?与NIO的区别,阻塞与非阻塞的区别?】

57 阅读2分钟

IO(Input/Output)是计算机系统中进行数据输入和输出的一种操作。在 Java 中,IO 操作通常使用 Java IO 库来实现。Java IO 库主要包括 InputStream、OutputStream、Reader、Writer 等类。

Java NIO(New IO)是 Java SE 1.4 引入的一种新的 IO API,它提供了更高效、更灵活的 IO 操作方式,支持非阻塞 IO、选择器等特性,适合处理高并发、大数据量的应用场景。Java NIO 的主要类包括 Channel、Buffer、Selector 等。

阻塞和非阻塞是 IO 操作中的两个概念,指的是在进行 IO 操作时,进程是否需要等待数据的到来。具体而言:

  1. 阻塞 IO(Blocking IO)

阻塞 IO 在进行 IO 操作时,进程会一直等待数据的到来,直到数据到达后才能继续执行。阻塞 IO 操作会一直占用线程,因此在高并发场景下会导致线程资源浪费和性能瓶颈。

  1. 非阻塞 IO(Non-blocking IO)

非阻塞 IO 在进行 IO 操作时,进程不会等待数据的到来,而是立即返回,通过轮询方式检查是否有数据到来。非阻塞 IO 操作不会占用线程资源,因此在高并发场景下可以提高系统的吞吐量。

Java NIO 相对于传统的 Java IO,最大的区别在于其支持非阻塞 IO。Java NIO 采用 Channel 和 Buffer 来替代传统的 InputStream 和 OutputStream。其中,Channel 支持非阻塞 IO,而 Buffer 用于存储数据。另外,Java NIO 还引入了 Selector 的概念,它能够管理多个 Channel,通过轮询方式检查是否有数据到来,从而实现高效的非阻塞 IO 操作。

综上所述,Java IO 和 Java NIO 有着明显的区别,Java NIO 相对于传统的 Java IO 具有更高效、更灵活的特性,而阻塞和非阻塞则是 IO 操作中的两个概念,非阻塞 IO 适合处理高并发、大数据量的应用场景。