首页 > 编程语言 > 详细

Java NIO Channel

时间:2020-12-23 15:09:46      阅读:27      评论:0      收藏:0      [点我收藏+]

Java NIO Channel

Java NIO Channels 类似于流,但有一些区别:

  • 可以从通道中读取数据或写入数据到通道中。流通常是单向的(读或写)。
  • 通道可以异步读写。
  • 通道的数据总是被读取到缓冲区中或将缓冲区中数据写入到通道。

如上所述,将数据从通道读取到缓冲区中,然后将数据从缓冲区写入通道中。这是一个说明:

技术分享图片

1 Channel 实现

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

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

FileChannel从文件中读取和写入数据。

DatagramChannel可以通过 UDP 读取和写入网络数据。

SocketChannel可以通过 TCP 读取和写入网络数据。

ServerSocketChannel 可以监听新的 TCP 连接,像 Web 服务器一样,为每个新的 TCP 连接创建一个SocketChannel

2 Channel 简单示例

这是一个简单示例,该示例使用 FileChannel 将一些数据读取到 Buffer

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

// create buffer with capacity 48 bytes.
ByteBuffer buffer = ByteBuffer.allocate(48);

// read into buffer
int bytesRead = inChannel.read(buffer);
while (bytesRead != -1) {
    System.out.println("Read " + bytesRead);
    // make buffer ready for read.
    buffer.flip();

    while (buffer.hasRemaining()) {
        // read 1 byte at a time.
        System.out.println((char) buffer.get());
    }

    // make buffer ready for writing.
    buffer.clear();
    bytesRead = inChannel.read(buffer);
}
accessFile.close();

注意 buf.flip() 的调用。首先,读入数据到缓冲区,然后反转 Buffer,再从 Buffer 中读取数据。在下一节有关 Buffer 的文档中,将对此进行详细的说明。

Java NIO Channel

原文:https://www.cnblogs.com/yeyangshu/p/14178454.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!