IO和NIO的区别

区别:线程

IO NIO
面向流 面向缓冲
阻塞IO 非阻塞IO
选择器

1.面向流和面向缓冲it

IO是面向流的,NIO是面向缓冲区的;面向流意味着每次从流中读取一个字节或多个字节,直到读取完全部的字节,这些字节没有被缓冲,所以没法移动流中的数据;而NIO是面向缓冲区的,它把数据读取到一个稍后处理的缓冲区中,须要时能够在缓冲区中移动,增长了灵活性;可是须要确保缓冲区中是否包含须要的数据,另外,将新数据写入缓冲区中时,要确保不会覆盖还没有处理的数据。table

2.阻塞IO和非阻塞IOchannel

IO的流是阻塞,意味着当一个线程在调用read和write方法时,什么都不能干,只有数据被读取或者彻底写入;NIO是非阻塞的,一个线程从通道读取数据时,仅能够获得当前可用的数据,若是没有数据可用,那么会继续执行,而不是阻塞,直到获取可用数据以前,均可以作其余事情,线程一般将非阻塞IO的空闲时间用在其它其它通道的IO操做上,因此一个单独的线程能够管理多个输入和输出通道(channel)。方法

3.选择器数据

JAVA NIO中的选择器使得一个线程能够管理多个通道,能够注册多个通道到一个选择器中,而后使用一个线程来选择通道;选择通道中已经有能够处理的输入或者输出。这种选择机制使得一个线程能够管理多个通道。tab

相关文章
相关标签/搜索