欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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) {
  // 处理异常
  ...
}

 

  • 【Java NIO 简例】Channel
            
    
    博客分类: Java nio 
  • 大小: 33.5 KB
相关标签: nio