Java NIO 的管道是 2 个线程间的单向数据传输。一个管道(Pipe)有一个 source channel 和一个 sink channel。我们把数据写入 sink channel 中,从 source channel 读取。
阅读文章的过程中如果有任何疑问,欢迎添加笔者为好友,拉您进【七日书摘】微信交流群,一起交流技术,一起打造高质量的职场技术交流圈子,抱团取暖,共同进步。
Java NIO Pipe 原理图示:
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 值会告诉我们多少字节被读进了缓冲区。
------完------
推荐阅读:
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)
参考资源:
https://blog.csdn.net/Andrew_Yuan/article/details/80215164
https://wiki.jikexueyuan.com/project/java-nio-zh/java-nio-pipe.html