JAVA NIO Channel 跟BIO中的steam有点像,但是又有一些不同点:
1)你可以同时对channel进行读和写,而sream是单向的(读或者写)
2)channel可以读和写是异步的(要不怎么能叫NIO呢 O(∩_∩)O~)
3)无论channel的读还是写,都是跟buffer紧密相关的。
基于上面提到的几点,你可以把数据从channel中读到buffer中,也可以从buffer中把数据写到channel中。
Channel 实现类:
FileChannel可以从文件中读数据,也可以写数据到文件中。
DatagramChannel是基于UDP协议的网络的读写
SocketChannel是基于TCP协议的网络读写
ServerSocketChannel用于监听TCP的链接,像web服务器一样,当有一个连接过来的时候,一个SocketChannel就会被创建。
下面是一个基本的例子代码
注意flip方法,一开始读取数据到buffer中,然后flip它,再get数据。后面会详细讲这个方法。