【Java NIO 简例】Channel

 

.

原文:《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代码

 

  1. try (RandomAccessFile file = new RandomAccessFile("data.txt", "r")) {  

  2.   FileChannel channel = file.getChannel();  

  3.   ByteBuffer buffer = ByteBuffer.allocate(1024);  

  4.   int byteCount = channel.read(buffer);  

  5.   while (byteCount != -1) {  

  6.     buffer.flip();  // 将buffer转换为读模式,内部游标指向头部,以便从头开始读取数据  

  7.     while (buffer.hasRemaining()) {  

  8.       System.out.print((char) buffer.get());  

  9.     }  

  10.     buffer.clear();  

  11.     byteCount = channel.read(buffer);  

  12.   }  

  13. } catch (IOException e) {  

  14.   // 处理异常  

  15.   ...  

  16. }  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值