Java NIO 中的 Channel 分类:
- FileChannel
- SocketChannel
- ServerSocketChannel
- DatagramChannel
FileChannel: 主要用于文件的读写,可以从磁盘上读取文件,也可以向磁盘上写入文件。
SocketChannel:用于 Socket 的 TCP 连接的数据读写,既可以从 Channel 读数据,也可以向 Channle 中写入数据
ServerSocketChannel:通过 ServerSocketChannel 可以监听 TCP 连接,服务端监听到连接之后,会为每个请求创建一个 SocketChannel
DatagramChannel:用于 UDP 协议的数据读写
接下来就分别介绍一下。
FileChannel
主要用于操作文件,废话不多说,直接看例子。
准备文件
test-file.txt
,内容shDEQuanZhanBiJi
输入 FileInputStream
用于从 FileChannel 中读取数据,例如将指定文件输入到 FileChannel 中,我们就能获取到文件的内容,接下来编写 FileChannel 的 输入流 核心代码:
public static void main(String[] args) throws IOException {
// 创建一个输入流
FileInputStream fileInputStream = new FileInputStream("test-file.txt");
// 通过输入流获取到 channel
FileChannel fileChannel = fileInputStream.getChannel();
// 准备好 ByteBuffer
ByteBuffer buffer = ByteBuffer.allocate(16);
// 将 输入流 的 channel 的数据读入 buffer 中
fileChannel.read(buffer);
// 简单打印 buffer 的内容
printBuffer(buffer); // shDEQuanZhanBiJi
}
复制代码
这里面的 ByteBuffer 是 channel 进行读、写数据的中间媒介。要从 channel 中读取数据(也就是上面这个例子),需要先将数据读到 ByteBuffer 中;同理,要想向 channel 中写入数据,也需要先将数据写入 ByteBuffer(下面讲输出流的时候会讲)。
对 ByteBuffer 不熟悉的可以先看看我之前写的《玩转 ByteBuffer》,