简述
正如我们所知,引入Java NIO是为了推进传统的Java IO API。使NIO比IO更有效的主要增强功能是NIO中使用的通道数据流模型以及将操作系统用于传统的IO任务。
Java NIO和Java IO之间的区别可以解释如下 :
-
如上一篇文章中所述,NIO缓冲区和面向通道的数据流用于I / O操作,与IO相比,可提供更快的执行速度和更好的性能。此外,NIO使用操作系统执行传统的I / O任务,这再次使其更加高效。
-
NIO和IO之间的另一个区别是,这个IO使用流线数据流,即一次多一个字节,并依赖于将数据对象转换为字节,反之亦然,而NIO处理数据块是字节块。
-
在java IO中,流对象是单向的,而在NIO中,通道是双向的,这意味着通道可用于读取和写入数据。
-
IO 中的简化数据流不允许在数据中来回移动。如果情况需要在从流中读取的数据中来回移动,则需要先将其缓存在缓冲区中。在NIO的情况下,我们使用面向缓冲区的,它允许在不需要缓存的情况下来回访问数据。
-
NIO API还支持多线程,以便可以异步读取和写入数据,例如在执行IO操作时不会阻塞当前线程的方式。这再次使它比传统的Java IO API更有效。
-
在java NIO中引入选择器时引入了多线程的概念,该选择器允许以异步或非阻塞方式侦听IO事件的多个通道。
-
NIO中的多线程使它成为非阻塞,这意味着仅当数据可用时才请求线程读取或写入,否则线程可以在平均时间内用于其他任务。但是在传统的java IO的情况下,这是不可能的,因为它不支持多线程,这使得它成为阻塞。
-
NIO允许仅使用单个线程管理多个通道,但代价是解析数据可能比在java IO.So 的情况下从阻塞流读取数据要复杂一些,以防一次发送大量数据所需的具有非常高带宽的连接更少,在这种情况下,Java IO API可能是最合适的。