一篇学会 Java NIO Channel 的使用
要从 channel 中读取数据(也就是上面这个例子),需要先将数据读到 ByteBuffer 中;同理,要想向 channel 中写入数据,也需要先将数据写入 ByteBuffer(下面讲输出流的时候会讲)。
Java NIO 中的 Channel 分类:
- FileChannel
- SocketChannel
- ServerSocketChannel
- DatagramChannel
channel 分类
FileChannel: 主要用于文件的读写,可以从磁盘上读取文件,也可以向磁盘上写入文件。
SocketChannel:用于 Socket 的 TCP 连接的数据读写,既可以从 Channel 读数据,也可以向 Channle 中写入数据
ServerSocketChannel:通过 ServerSocketChannel 可以监听 TCP 连接,服务端监听到连接之后,会为每个请求创建一个 SocketChannel
DatagramChannel:用于 UDP 协议的数据读写
接下来就分别介绍一下。
FileChannel
主要用于操作文件,废话不多说,直接看例子。
准备文件 test-file.txt ,内容 shDEQuanZhanBiJi
test-file.txt 文件
输入 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 的内