Java中的NIO详解Day02-通道Channel

以你之姓@ 2023-02-26 05:20 85阅读 0赞

通道Channel

  • Channel的特点
  • Channel的实现
  • Channel实例

Channel的特点

  • Java NIO的通道的特点:

    • 既可以从通道中读取数据,又可以写数据到通道,通道的读写是双向的
    • 通道可以异步读写
    • 通道中的数据总是要先读到一个Buffer, 或者是从一个Buffer写入

Channel的实现

  • Java NIO的通道的重要实现:

    • FileChannel: 从文件中读取数据
    • DatagramChannel: 通过UDP读取网络中的数据
    • SocketChannel: 通过TCP读取网络中的数据
    • ServerSocketChannel: 可以监听新进来的TCP连接,对每一个新进来的连接都会创建一个SocketChannel

Channel实例

  • 使用FileChannel读取数据到Buffer中:

    RandomAccessFile file = new RandomAccessFile(“data/nio-data.txt”, “rw”);
    FileChannel channel = file.getChannel();

    ByteBuffer buffer = ByteBuffer.allocate(64);

    int bytesRead = channel.read(buffer);
    while (bytesRead != -1) {

    1. System.out.println("Read:" + bytesRead);
    2. buffer.flip();
    3. while (buffer.hasRemaining()) {
    4. System.out.println((char) buf.get());
    5. }
    6. buffer.clear();
    7. bytesBuffer = channel.read(buffer);

    }
    file.close();

  • 注意buffer.flip() 的调用:

    • 首先读取数据到Buffer
    • 然后反转Buffer
    • 接着再从Buffer中读取数据

发表评论

表情:
评论列表 (有 0 条评论,85人围观)

还没有评论,来说两句吧...

相关阅读