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.[url=http://ifeve.com/overview/]Java NIO概述[/url]
2.[url=http://http://ifeve.com/channels/]Java NIO Channel[/url]
3.[url=http://ifeve.com/buffers/]Java NIO Buffer[/url]
4.[url=http://ifeve.com/java-nio-scattergather/]Java NIO Scatter / Gather[/url]
5.[url=http://ifeve.com/java-nio-channel-to-channel/]Java NIO 通道之间的数据传输[/url]
6.[url=http://ifeve.com/selectors/]Java NIO Selector[/url]
7.[url=http://ifeve.com/file-channel/]Java NIO FileChannel[/url]
8.[url=http://ifeve.com/socket-channel/]Java NIO SocketChannel[/url]
9.[url=http://ifeve.com/server-socket-channel/]Java NIO ServerSocketChannel[/url]
10.[url=http://ifeve.com/datagram-channel/]Java NIO DataGramChannel[/url]
11.[url=http://ifeve.com/pipe/]Java NIO Pipe[/url]
12.[url=http://ifeve.com/java-nio-vs-io/]Java NIO 与IO[/url]

博文转载:http://ifeve.com/java-nio-all/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值