《Java NIO》:Channel and Buffer (通道和缓冲区)
从今天开始,自己将会了解下Java NIO的相关知识,以及会看下相关的类库源码。
和往常自己学习新知识之前,自己都会阅读网上的一些博文和资料,以使自己对这一块的知识有一个大致的了解,然后再按照自己感兴趣的点来研究一点点知识。关于Java NIO这一块的知识,也是如此。
关于Java NIO涉及到三个重要的概念:
1、Channel 通道
2、Buffer 缓冲区
3、Selector 选择器
在这篇文章的评论中对Java NIO 中的三个概念用一个比方来讲述,比较好理解,摘入如下:
其中Channel对应以前的流,Buffer不是什么新东西,Selector是因为NIO可以使用异步的非堵塞模式才加入的东西。
以前的流总是堵塞的,一个线程只要对它进行操作,其它操作就会被堵塞,也就相当于水管没有阀门,你伸手接水的时候,不管水到了没有,你就都只能耗在接水(流)上。
NIO的Channel的加入,相当于增加了水龙头(有阀门),虽然一个时刻也只能接一个水管的水,但依赖轮换策略,在水量不大的时候,各个水管里流出来的水,都可以得到妥善接纳,这个关键之处就是增加了一个接水工,也就是Selector,他负责协调,也就是看哪根水管有水了的话,在当前水管的水接到一定程度的时候,就切换一下:临时关上当前水龙头,试着打开另一个水龙头(看看有没有水)。
当其他人需要用水的时候,不是直接去接水,而是事前提了一个水桶给接水工,这个水桶就是Buffer。也就是,其他人虽然也可能要等,但不会在现场等,而是回家等,可以做其它事去,水接满了,接水工会通知他们。
这其实也是非常接近当前社会分工细化的现实,也是统分利用现有资源达到并发效果的一种很经济的手段,而不是动不动就来个并行处理,虽然那样是最简单的,但也是最浪费资源的方式。
上面的比方还是相当清晰的描述了Channel、Buffer和Selector的作用。
更多的关于Java NIO的学习资料,并发编程网上有关于Java NIO系列的教程,地址如下:http://ifeve.com/java-nio-all/。
本着学习的态度,自己也是跟着这一系列的文章进行学习、实验、看源码以及记录,以此来掌握Java NIO相关的知识。
这篇博文主要介绍下Channel和Buffer,以及写两个小Demo,让我们感性的认识一下这两个小东西。