- Java NIO Tutorial
- Java NIO - Home
- Java NIO - Overview
- Java NIO - Environment Setup
- Java NIO vs JAVA IO
- Java NIO - Channels
- Java NIO - File Channel
- Java NIO - DataGram Channel
- Java NIO - Socket Channel
- Java NIO - Server Socket 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 Useful Resources
- Java NIO - Quick Guide
- Java NIO - Useful Resources
- Java NIO - Discussion
Java NIO - 通道
描述
顾名思义,通道用作从一端到另一端的数据流的手段。在 Java NIO 中,通道在缓冲区和另一端的实体之间的作用相同,换句话说,通道用于将数据读取到缓冲区以及从缓冲区写入数据。
与传统 Java IO 通道中使用的流不同,它有两种方式,即可以读取也可以写入。Java NIO 通道支持阻塞和非阻塞模式下的异步数据流。
通道的实现
Java NIO 通道主要在以下类中实现 -
FileChannel - 为了从文件中读取数据,我们使用文件通道。文件通道对象只能通过调用文件对象的 getChannel() 方法来创建,因为我们不能直接创建文件对象。
DatagramChannel - 数据报通道可以通过 UDP(用户数据报协议)通过网络读取和写入数据。可以使用工厂方法创建 DataGramchannel 的对象。
SocketChannel - SocketChannel 通道可以通过 TCP(传输控制协议)通过网络读取和写入数据。它还使用工厂方法来创建新对象。
ServerSocketChannel - ServerSocketChannel 通过 TCP 连接读取和写入数据,与 Web 服务器相同。对于每个传入连接,都会创建一个 SocketChannel。
例子
以下示例从C:/Test/temp.txt中的文本文件读取并将内容打印到控制台。
临时文件.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!