java NIO管道是俩个线程间的单路数据链接。 每一个管道Pipe都有一个source channel 和一个sink channel。你把数据写入到sinkchannel中,然后就可以从sourcechannel中读取到该数据。
下面是一张关于管道原则的图例:
1.创建一个管道
通过调用Pipe.open()方法,你可以打开一个管道。正如如下所示:
Pipe pipe = Pipe.open();
2.向管道中写
要想向Pipe中写入数据,你需要访问sink channel。像下面的代码所示:
Pipe.SinkChannel sinkChannel = pipe.sink();
调用它的write()方法,你可以向其中写入数据:
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);
}
3.从管道中读
要想从管道中读数据,你需要先获取source channel。正如下面所示:
Pipe.SourceChannel sourceChannel = pipe.source();
从source channel中读取数据,你可以调用它的read()方法,正如下所示:
ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead =inChannel.read(buf);
read()方法返回的int值就是在告诉我们有多少字节的数据读入到了buffer里面。