.
原文:《Java NIO Channel》
Channel vs Stream
-
Stream 是单向的。要么是输入流(读数据),要么是输出流(写数据)。
Channel 可以是双向的。既可以从 Channel 读取数据,又可以向 Channel 写入数据
-
Channel 支持异步读写;Stream 都是同步操作
-
Channel 总是与 Buffer 合作:将数据读取到 Buffer,或将 Buffer 中的数据写入到 Channel
常见 Channel 类
-
FileChannel:文件读写
-
DatagramChannel:UDP 通信
-
SocketChannel:TCP 通信
-
ServerSocketChannel:TCP 通信的服务端使用;会针对每个来自 Client 的连接创建一个 SocketChannel
Channel 使用简例
Java代码
-
try (RandomAccessFile file = new RandomAccessFile("data.txt", "r")) {
-
FileChannel channel = file.getChannel();
-
ByteBuffer buffer = ByteBuffer.allocate(1024);
-
int byteCount = channel.read(buffer);
-
while (byteCount != -1) {
-
buffer.flip(); // 将buffer转换为读模式,内部游标指向头部,以便从头开始读取数据
-
while (buffer.hasRemaining()) {
-
System.out.print((char) buffer.get());
-
}
-
buffer.clear();
-
byteCount = channel.read(buffer);
-
}
-
} catch (IOException e) {
-
// 处理异常
-
...
-
}