Java NIO 的管道是 2 个线程间的单向数据传输。一个管道(Pipe)有一个 source channel 和一个 sink channel。我们把数据写入 sink channel 中,从 source channel 读取。

阅读文章的过程中如果有任何疑问,欢迎添加笔者为好友,拉您进【七日书摘】微信交流群,一起交流技术,一起打造高质量的职场技术交流圈子,抱团取暖,共同进步。
七日书摘官方群.jpg

Java NIO Pipe 原理图示:
pipe-internals.png
Java NIO: Pipe Internals

创建管道 (Creating a Pipe)

你可以通过 Pipe.open() 方法打开管道。示例如下:

Pipe pipe = Pipe.open();

向管道写入数据(Writing to a Pipe)

向管道写入数据需要访问 sink channel。示例如下:

Pipe.SinkChannel sinkChannel = pipe.sink();

调用 SinkChannel 的 write() 方法,将数据写入 SinkChannel。示例如下:

String newData = "New String to write to file..." + System.currentTimeMillis();

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());

buf.flip();

while(buf.hasRemaining()) {
    sinkChannel.write(buf);
}

从管道读取数据(Reading from a Pipe)

从管道中读取数据需要访问他的 source channel。示例如下:

Pipe.SourceChannel sourceChannel = pipe.source();

通过调用 read() 方法从 source channel 读取数据。示例如下:

ByteBuffer buf = ByteBuffer.allocate(48);

int bytesRead = inChannel.read(buf);

read() 方法返回的 int 值会告诉我们多少字节被读进了缓冲区。

英文原文链接:http://tutorials.jenkov.com/java-nio/pipe.html

------完------

推荐阅读:

Java NIO 简明教程 之 Java NIO 文件通道(FileChannel)

Java NIO 简明教程 之 Java NIO 套接字通道(SocketChannel)

Java NIO 简明教程 之 Java NIO 服务端套接字通道(ServerSocketChannel)

Java NIO 简明教程 之 Java NIO 非阻塞式服务器(Non-blocking Server)

Java NIO 简明教程 之 Java NIO 数据报通道(DatagramChannel)

Java基础知识面试题篇(2020年2月最新版)

更技术学习请进入七日书摘官方群: 七日书摘官方群

七日书摘官方群群聊二维码.png

参考资源:
https://blog.csdn.net/Andrew_Yuan/article/details/80215164
https://wiki.jikexueyuan.com/project/java-nio-zh/java-nio-pipe.html