【Java NIO 简例】Channel
程序员文章站
2022-07-13 16:53:03
...
原文:《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 使用简例
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) { // 处理异常 ... }
上一篇: activemq实现队列的独有消费
下一篇: JTA分布式事务之JMS篇