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