Java NIO的pipe是两个线程之间的单向数据连接。每个Pipe都有一个源(source)channel和一个接收(sink)channel。你把数据写到sink channel中,这些数据可以被source channel读取。图示:

创建一个Pipe
你可以调用Pipe的静态方法open来创建pipe
Pipe pipe = Pipe.open();
向Pipe写数据
如果要写数据,从图可知,你需要获得sink channel:
Pipe.SinkChannel sinkChannel = pipe.sink();
然后可以通过调用它自己的write方法来写到sink channel,像这样:
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);
}
从Pipe中读数据
读数据就要获得source channel:
Pipe.SourceChannel sourceChannel = pipe.source();
调用它的read方法,就像这样:
ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead = inChannel.read(buf);
返回的int值表示读到buffer中字节的长度。
本文详细介绍了Java NIO中的Pipe组件,包括如何创建Pipe、通过SinkChannel写入数据及通过SourceChannel读取数据的过程。Pipe提供了两个线程间的数据传输通道,是实现线程间通信的有效工具。
658

被折叠的 条评论
为什么被折叠?



