Java NIO 通道,原文地址:http://tutorials.jenkov.com/java-nio/channels.html
Java NIO 中的通道和流是相似的,但还是有以下几点不同之处:
- 你可以从通道中读数据,也可以向通道中写数据;而流只能是单向的进行一种操作。
- 从通道中读写数据可以使用异步的方式。
- 通道总是与缓冲区协作进行读写操作。
正如上文说的,你可以从通道读数据到缓冲区,也可以从缓冲区读数据到通道。以下插图描述了这个过程:
通道的实现
以下是 Java NIO 中通道的一些重要的实现:
- 文件通道
- 数据报通道
- 套接字通道
- 服务器端套接字通道
文件通道可以从文件中读写数据。
数据报通道可以从使用 UDP 协议的网络上读写数据。
套接字通道可以从使用 TCP 协议的网络上读写数据。
服务器端套接字通道可以让你像一个服务器一样监听 TCP 连接请求,并未每一个请求创建一个套接字通道。
基本的通道实例
以下是个使用文件通道从文件中读取数据,写入到缓冲区的简单案例:
请注意方法 buf.flip()
的调用。首先你从文件中读出数据写入了缓冲区,然后你翻转了缓冲区的位置记录。最后你从缓冲区中把数据读取出来。在下一小节中,我将会详细讲解缓冲区。