Java NIO 之管道(Pipe)

java NIO管道是俩个线程间的单路数据链接。 每一个管道Pipe都有一个source channel 和一个sink channel。你把数据写入到sinkchannel中,然后就可以从sourcechannel中读取到该数据。

下面是一张关于管道原则的图例:


Java NIO 之管道(Pipe)_第1张图片
Java NIO: 管道的内部结构


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里面。

你可能感兴趣的:(Java NIO 之管道(Pipe))