通道 | Java NIO

栏目: Java · 发布时间: 7年前

内容简介:Java NIO 通道类似于流,但有一些差异:如上所述,你从通道将数据读入缓冲区,从缓冲区将数据写入通道。以下是示意图:以下是 Java NIO 中非常重要的通道实现:

Java NIO 通道类似于流,但有一些差异:

  • 你可以对通道读写。流通常是单向(读或写)

  • 异步读写通道

  • 通道通常往缓冲区读,或从缓冲区写

如上所述,你从通道将数据读入缓冲区,从缓冲区将数据写入通道。以下是示意图:

通道 | Java NIO

通道实现

以下是 Java NIO 中非常重要的通道实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel 从文件读或往文件写数据。

DatagramChannel 可以通过 UDP 在网络上读写数据。

SocketChannel 可以通过 TCP 在网络上读写数据。

ServerSocketChannel 允许你监听接入的 TCP 连接,像 web 服务器一样。每接入一个连接就创建一个 ServerSocketChannel

通道基础示例

以下是使用 FileChannel 把一些数据读入缓冲区的基础示例:

RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(48);

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

    log.info("Read -> {}", bytesRead);

    buffer.flip();

    while (buffer.hasRemaining()) {
        log.info("Read -> {}", buffer.get());
    }

    buffer.clear();

    bytesRead = inChannel.read(buffer);
}

aFile.close();
复制代码

注意调用 buf.flip() 。首先将数据写入缓冲区,然后切换模式,读出数据。关于缓冲区的更多详情见下文。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

云攻略

云攻略

马克·贝尼奥夫、卡莱尔·阿德勒 / 徐杰 / 海天出版社 / 2010年8月 / 36.00元

Apple、Google、甲骨文、腾讯 都已投入了云的怀抱, 你还在等什么? 快来加入我们! 最初,Salesforce.com 只是一间小小的租赁公寓 在短短10年内 它已成长为 世界上发展最快、最具创新力的 产业变革领导者 曾经,这是个软件为王的时代。 现在,这是个云计算的新时代。 NO SOFTWARE 抛弃软件的......一起来看看 《云攻略》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试