顾名思义,通道(Channel)被用作从一端到另一端的数据流。在Java NIO中,通道用于读取数据到缓冲区以及从缓冲区写入数据。
与传统Java IO通道中使用的流不同,Java NIO通道支持阻塞和非阻塞两种方式的异步数据流。
Java NIO通道主要在以下类中实现-
FileChannel - 为了从文件读取数据,无涯教程使用文件通道。
DatagramChannel - 数据报通道可以通过UDP(用户数据报协议)在网络上读写数据。
SocketChannel - SocketChannel通道可以通过TCP(传输控制协议)在网络上读写数据。
ServerSocketChannel - ServerSocketChannel与Web服务器一样通过TCP连接读取和写入数据。
以下示例从C:/Test/temp.txt中读取文本文件,然后将内容打印到控制台。
Hello World!
ChannelDemo.java
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翻转缓冲区以准备获取操作 byteBuffer.flip(); while (byteBuffer.hasRemaining()) { System.out.print((char) byteBuffer.get()); } } file.close(); } }
运行上面代码输出
Hello World!
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)