博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaNIO Channel(3)
阅读量:3752 次
发布时间:2019-05-22

本文共 979 字,大约阅读时间需要 3 分钟。

JavaNIO channels 和 streams相似中带有不同

  • channels是全双工,支持同时读、写数据,streams同一时刻只能读,或者写
  • channels支持异步读写
  • channels总是从buffers 中读写

如上所言:程序可以从channel中读取数据到buffer中,也可以从buffer中读数据到channel中

这里写图片描述

Channel Implementations(通道的实现类)

下面是NIO中最重要的channel实现类:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel :文件读写

DatagramChannel :UDP读写
SocketChannel :TCP读写
ServerSocketChannel :监听TCP连接,就像web服务器所做的那样。每来一个连接,都会创建一个SocketChannel对象。

简单示例:

用FileChannel读写数据到Buffer

RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");    FileChannel inChannel = aFile.getChannel();    ByteBuffer buf = ByteBuffer.allocate(48);    int bytesRead = inChannel.read(buf);    while (bytesRead != -1) {      System.out.println("Read " + bytesRead);      buf.flip();      while(buf.hasRemaining()){          System.out.print((char) buf.get());      }      buf.clear();      bytesRead = inChannel.read(buf);    }    aFile.close();

注意到:buf.flip()方法。首先读入数据到Buffer,然后flip,然后从buffer读出数据。容后讲解buffers的细节。

你可能感兴趣的文章
逻辑题分享
查看>>
后端开发中常用的语言
查看>>
数学考试(牛客)
查看>>
Codeforces Round #697 (Div. 3)
查看>>
Codeforces Round #705 (Div. 2)
查看>>
2021-04-11
查看>>
迷宫(BFS)
查看>>
1816. 连通(BFS+DFS+并查集)
查看>>
2021省赛总结
查看>>
Codeforces Round #719 (Div. 3)
查看>>
3. Mybatis说明typeAliases
查看>>
4. Mybatis结果集映射ResultMap
查看>>
8. Mybatis动态SQL
查看>>
1. 我的第一个Spring程序
查看>>
2. Spring定义继承parent
查看>>
3. Spring基于构造函数的依赖注入
查看>>
4. Spring 基于设值函数的依赖注入set注入
查看>>
Linux文件/目录管理(高级)
查看>>
你还不会Linux下的vi/vim编辑器吗?
查看>>
【干货】建议收藏! ! !全网最全的Python.openpyxl操作Excel数据
查看>>