- Java NIO 教程
- Java NIO - 首页
- Java NIO - 概述
- Java NIO - 环境设置
- Java NIO vs JAVA IO
- Java NIO - 通道
- Java NIO - 文件通道 (File Channel)
- Java NIO - 数据报通道 (Datagram Channel)
- Java NIO - 套接字通道 (Socket Channel)
- Java NIO - 服务器套接字通道 (ServerSocket Channel)
- Java NIO - 散射 (Scatter)
- Java NIO - 聚集 (Gather)
- Java NIO - 缓冲区 (Buffer)
- Java NIO - 选择器 (Selector)
- Java NIO - 管道 (Pipe)
- Java NIO - 路径 (Path)
- Java NIO - 文件 (File)
- Java NIO - 异步文件通道 (AsynchronousFileChannel)
- Java NIO - 字符集 (CharSet)
- Java NIO - 文件锁 (FileLock)
- Java NIO 有用资源
- Java NIO - 快速指南
- Java NIO - 有用资源
- Java NIO - 讨论
Java NIO - 通道
描述
顾名思义,通道用作数据从一端流向另一端的媒介。在 Java NIO 中,通道充当缓冲区和另一端实体之间的桥梁;换句话说,通道用于将数据读取到缓冲区,以及将数据从缓冲区写入。
与传统 Java IO 中使用的流不同,通道是双向的,即可以读取也可以写入。Java NIO 通道支持数据的异步流,既可以阻塞模式也可以非阻塞模式。
通道的实现
Java NIO 通道主要在以下类中实现:
FileChannel − 为了读取文件中的数据,我们使用文件通道。文件通道的对象只能通过调用文件对象上的 getChannel() 方法来创建,我们不能直接创建文件通道对象。
DatagramChannel − 数据报通道可以通过 UDP(用户数据报协议)在网络上读取和写入数据。DataGramchannel 的对象可以使用工厂方法创建。
SocketChannel − 套接字通道可以通过 TCP(传输控制协议)在网络上读取和写入数据。它也使用工厂方法来创建新对象。
ServerSocketChannel − 服务器套接字通道在 TCP 连接上读取和写入数据,就像 Web 服务器一样。对于每个传入的连接,都会创建一个 SocketChannel。
示例
以下示例从C:/Test/temp.txt文本文件读取数据并将内容打印到控制台。
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 the buffer to prepare for get operation byteBuffer.flip(); while (byteBuffer.hasRemaining()) { System.out.print((char) byteBuffer.get()); } } file.close(); } }
输出
Hello World!
广告