`

【Java NIO 简例】Channel

    博客分类:
  • Java
nio 
阅读更多

原文:《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) {
  // 处理异常
  ...
}

 

  • 大小: 33.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics