Java NIO Channels 类似于流,但有一些区别:
如上所述,将数据从通道读取到缓冲区中,然后将数据从缓冲区写入通道中。这是一个说明:

以下是 Java NIO 中最重要的 Channel 实现:
FileChannel从文件中读取和写入数据。
DatagramChannel可以通过 UDP 读取和写入网络数据。
SocketChannel可以通过 TCP 读取和写入网络数据。
ServerSocketChannel 可以监听新的 TCP 连接,像 Web 服务器一样,为每个新的 TCP 连接创建一个SocketChannel。
这是一个简单示例,该示例使用 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 的文档中,将对此进行详细的说明。
原文:https://www.cnblogs.com/yeyangshu/p/14178454.html