- Java NIO 教程
- Java NIO - 首页
- Java NIO - 概述
- Java NIO - 环境搭建
- Java NIO vs JAVA IO
- Java NIO - 通道
- Java NIO - 文件通道
- Java NIO - 数据报通道
- Java NIO - 套接字通道
- Java NIO - 服务器套接字通道
- Java NIO - 散射
- Java NIO - 聚集
- Java NIO - 缓冲区
- Java NIO - 选择器
- Java NIO - 管道
- Java NIO - 路径
- Java NIO - 文件
- Java NIO - 异步文件通道
- Java NIO - 字符集
- Java NIO - 文件锁
- Java NIO 有用资源
- Java NIO - 快速指南
- Java NIO - 有用资源
- Java NIO - 讨论
Java NIO - 管道
在 Java NIO 中,管道是一个用于在两个线程之间写入和读取数据的组件。管道主要由两个负责数据传播的通道组成。
在两个组成通道中,一个称为接收通道,主要用于写入数据;另一个称为源通道,其主要目的是从接收通道读取数据。
在数据写入和读取过程中保持数据同步,必须确保数据读取的顺序与写入管道的顺序相同。
必须注意,管道中的数据流是单向的,即数据只能写入接收通道,并且只能从源通道读取。
在 Java NIO 中,管道被定义为一个抽象类,其中主要有三个方法,其中两个是抽象的。
管道类的的方法
open() − 此方法用于获取管道实例,或者我们可以说通过调用此方法创建管道。
sink() − 此方法返回管道的接收通道,该通道通过调用其写入方法来写入数据。
source() − 此方法返回管道的源通道,该通道通过调用其读取方法来读取数据。
示例
以下示例演示了 Java NIO 管道的实现。
import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.Pipe; public class PipeDemo { public static void main(String[] args) throws IOException { //An instance of Pipe is created Pipe pipe = Pipe.open(); // gets the pipe's sink channel Pipe.SinkChannel skChannel = pipe.sink(); String testData = "Test Data to Check java NIO Channels Pipe."; ByteBuffer buffer = ByteBuffer.allocate(512); buffer.clear(); buffer.put(testData.getBytes()); buffer.flip(); //write data into sink channel. while(buffer.hasRemaining()) { skChannel.write(buffer); } //gets pipe's source channel Pipe.SourceChannel sourceChannel = pipe.source(); buffer = ByteBuffer.allocate(512); //write data into console while(sourceChannel.read(buffer) > 0){ //limit is set to current position and position is set to zero buffer.flip(); while(buffer.hasRemaining()){ char ch = (char) buffer.get(); System.out.print(ch); } //position is set to zero and limit is set to capacity to clear the buffer. buffer.clear(); } } }
输出
Test Data to Check java NIO Channels Pipe.
假设我们有一个文本文件c:/test.txt,其内容如下。此文件将用作我们示例程序的输入。
广告