1、Pipe管道通常使用在对条线程之间共享数据的场景,模型如下图所示:
2、实战案例
@Test
public void nioPipe() throws IOException, InterruptedException {
//1、构建一个管道
Pipe pipe = Pipe.open();
//2、获取管道的SinkChannel,用于数据录入。
Pipe.SinkChannel sink = pipe.sink();
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put("main Thread".getBytes());
buffer.flip();
sink.write(buffer);
//3、构建一条线程,让其去获取到SinkChannel录入的数据并输出
Thread thread = new Thread(() -> {
//获取pipe实例的SourceChannel,然后读取其中的数据
Pipe.SourceChannel source = pipe.source();
ByteBuffer bufferThread = ByteBuffer.allocate(1024);
try {
source.read(bufferThread);
bufferThread.flip();
System.out.println(new String(bufferThread.array(), 0, bufferThread.limit()));
} catch (IOException e) {
e.printStackTrace();
}
});
thread.start();
Thread.sleep(2000L);
}