io和nio区别与应用

更新时间:02-09 教程 由 沉苍 分享

io和nio区别与应用?

JAVA在JDK1.4之后引入了一个新的库NIO,其实他的作用跟IO相同,只是他们的实现方式不同,NIO的效率要高于IO。

一 面向流和面向缓冲

IO:面向流,阻塞IO

NIO:面向缓存,非阻塞IO,包含类:Channel(通道),Buffer(缓冲区), Selector(选择区)

IO面向流,每次从流中读取一个或者多个字节,直到读取完所有字节,在此过程中不能执行其他操作,也不能移动流中的数据。

NIO面向缓冲,将数据从通道读取到缓冲区或者从缓冲区写入通道,通过selector监听多个通道事件,实现单线程监听多个数据通道,而且数据还能在缓冲区前后移动,使处理方式更加灵活,不过需要注意的是在更多数据存入缓冲区的时候,不要覆盖缓冲区尚未处理的数据

二 阻塞和非阻塞

Java IO流是阻塞的,当一个线程调用read()或write()时,该线程被阻塞,直到完成整个流的读写操作后,该线程才能执行其他操作。而Java NIO是非阻塞的,利用事件驱动机制,事件收到再去触发,当一个线程发出请求读取数据,在没有得到响应之前,线程是空闲的,就不会让线程阻塞,当前线程仍然可以去执行其他操作,包括写也是一样,在此模式下一个单独的线程可以管理多个输入输出通道。

三 应用场景

NIO是为了弥补IO的缺陷而诞生的,但是NIO也有相应缺点,NIO每一次数据处理都是对缓冲区进行的,那么读取之前就要检查缓冲区数据是否完整或已经被读取完毕。因此少量连接,但是要传输大量数据适用于IO,而NIO适用于大量连接,却只传输少量数据,比如聊天工具等。

在此引用网上的一个例子,IO就相当于没有阀门的水管,去接水的时候,不管水到没有,接满没得,都要耗在这上面。而NIO不止是加上了一个水龙头,甚至还配了一名接水工,大家都把水桶给他,由他来调度接水,接满之后直接去拿就行了,因此在接水的时候你可以去干其他事,而不是把时间耗在等待上面,节约资源。

声明:关于《io和nio区别与应用》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2194159.html