Java NIO-2.Channel

Java NIO 的Channels和流(stream)很像,但是有如下区别:

  • Channels既能读又能写,Stream只能读或者写
  • Channels能异步读写
  • Channels只能读到Buffer中,或者从Buffer写入

Channel实例

以下是Java NIO中重要的的Channel实例:

  • FileChannel:从/往文件中读/写
  • DatagramChannel:通过UDP读写网络数据
  • SocketChannel:通过TCP读写网络数据
  • ServerSocketChannel:监听接入的TCP连接,就像web服务器那样。对于每个接入进来的TCP连接都创建一个SocketChannel

基础Channel例子

以下是一个例子,通过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);

文件nio-data.txt:

1234567890
1234567890
1234567890
1234567890
1234567890
1234567890

输出结果为:

Read 48
1234567890
1234567890
1234567890
1234567890
1234Read 17
567890
1234567890

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux-Shell变量

    悠扬前奏
  • LintCode-407.加一

    给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。 该数字按照大小进行排列,最大的数在列表的最前面。

    悠扬前奏
  • Java NIO-13.NIO Path

    Java Path接口是Java NIO2一部分,是对Java6 和Java7的更新。Java的Path接口在Java7中被添加到Java NIO中,位于jav...

    悠扬前奏
  • sqlacodegen:通过mysql语句生成sqlalchemy的model

    引用网页描述:这个工具读取现有数据库的结构并生成相应的SQLAlchemy模型代码。

    用户1558882
  • 【Linux】Shell 时间运算以及时间差计算方法!

    最近一段时间,在处理Shell 脚本时候,遇到时间的处理问题。时间的加减,以及时间差的计算。

    zenRRan
  • AkShare-中国宏观-国房景气指数

    国房景气指数是全国房地产开发业综合景气指数的简称。它是对房地产业发展变化趋势和变化程度的量化反映,由8个分类指数合成运算出综合指数,并用百分制表示。其中,综合...

    AkShare
  • psacct

    psacct或ACCT都是在系统上监控用户活动的开源应用程序。 这些应用程序在后台运行,并跟踪系统上的每个用户活动以及正在使用的资源。

    胡齐
  • Keras 系列(六) CNN 分类及fit_generator函数

    在实际项目中,训练数据会很大,以前简单地使用model.fit将整个训练数据读入内存将不再适用,所以需要改用model.fit_generator分批...

    zhangqibot
  • Ansible常用模块介绍

    1、 ansible-doc 希望知道更加详细的module的信息,最好的方法是使用ansible自带的ansible-doc的-s选项 [root@node1...

    程裕强
  • Linux-Shell变量

    悠扬前奏

扫码关注云+社区

领取腾讯云代金券