Java NIO

Java NIO:Channels and Buffers(通道和缓冲区)
         标准的IO基于子接口iuhe字符流进行操作,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取缓冲区中,或者从缓冲区写入到通道中。

Java NIO:Non-blocking IO(非阻塞IO)
         Java NIO可以让你非阻塞的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继承处理它。从缓冲区写入通道也类似。

Java NIO:Selectors(选择器)
         Java NIO引入了选择器的概念,选择器监听说个通道的时间(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

下面一个例子是我看过的一个讲述的很贴切的例子:  
一辆从 A 开往 B 的公共汽车上,路上有很多点可能会有人下车。司机不知道哪些点会有哪些人会下车,对于需要下车的人,如何处理更好?  
1. 司机过程中定时询问每个乘客是否到达目的地,若有人说到了,那么司机停车,乘客下车。 ( 类似阻塞式 )  
2. 每个人告诉售票员自己的目的地,然后睡觉,司机只和售票员交互,到了某个点由售票员通知乘客下车。 ( 类似非阻塞 )    
很显然,每个人要到达某个目的地可以认为是一个线程,司机可以认为是 CPU 。在阻塞式里面,每个线程需要不断的轮询,上下文切换,以达到找到目的地的结果。而在非阻塞方式里,每个乘客 ( 线程 ) 都在睡觉 ( 休眠 ) ,只在真正外部环境准备好了才唤醒,这样的唤醒肯定不会阻塞。

    1. Java NIO概述
    2. Java NIO Channel
    3. Java NIO Buffer
    4. Java NIO Scatter / Gather
    5. Java NIO 通道之间的数据传输
    6. Java NIO Selector
    7. Java NIO FileChannel
    8. Java NIO SocketChannel
    9. Java NIO ServerSocketChannel
    10. Java NIO DataGramChannel
    11. Java NIO Pipe
    12. Java NIO 与IO

博文转载:http://ifeve.com/java-nio-all/

你可能感兴趣的:(java)