📅  最后修改于: 2020-11-14 10:10:44             🧑  作者: Mango
顾名思义,通道被用作从一端到另一端的数据流的平均值。在Java NIO中,通道在缓冲区和另一端的实体之间作用相同,换句话说,通道用于读取数据到缓冲区以及从缓冲区写入数据。
与传统Java IO通道中使用的流不同,Java NIO通道在阻塞和非阻塞模式下都支持异步数据流。
Java NIO通道主要在以下类中实现-
FileChannel-为了从文件中读取数据,我们使用文件通道。只能通过对文件对象调用getChannel()方法来创建文件通道的对象,因为我们无法直接创建文件对象。
DatagramChannel-数据报通道可以通过UDP(用户数据报协议)通过网络读取和写入数据.DataGramchannel的对象可以使用工厂方法创建。
SocketChannel -SocketChannel通道可以通过TCP(传输控制协议)在网络上读写数据。它还使用工厂方法创建新对象。
ServerSocketChannel -ServerSocketChannel与Web服务器一样,通过TCP连接读取和写入数据。对于每个传入连接,都会创建一个SocketChannel。
以下示例从C:/Test/temp.txt中读取文本文件,然后将内容打印到控制台。
Hello World!
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ChannelDemo {
public static void main(String args[]) throws IOException {
RandomAccessFile file = new RandomAccessFile("C:/Test/temp.txt", "r");
FileChannel fileChannel = file.getChannel();
ByteBuffer byteBuffer = ByteBuffer.allocate(512);
while (fileChannel.read(byteBuffer) > 0) {
// flip the buffer to prepare for get operation
byteBuffer.flip();
while (byteBuffer.hasRemaining()) {
System.out.print((char) byteBuffer.get());
}
}
file.close();
}
}
Hello World!