通道 | Java NIO

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

内容简介: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() 。首先将数据写入缓冲区,然后切换模式,读出数据。关于缓冲区的更多详情见下文。


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

查看所有标签

猜你喜欢:

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

JavaScript语言精粹

JavaScript语言精粹

Douglas Crockford / 赵泽欣、鄢学鹍 / 电子工业出版社 / 2009-4 / 35.00元

本书通过对JavaScript语言的分析,甄别出好的和坏的特性,从而提取出相对这门语言的整体而言具有更好的可靠性、可读性和可维护性的JavaScript的子集,以便你能用它创建真正可扩展的和高效的代码。 雅虎资深JavaScript架构师Douglas Crockford倾力之作。 向读者介绍如何运用JavaScript创建真正可扩展的和高效的代码。一起来看看 《JavaScript语言精粹》 这本书的介绍吧!

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

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具