Java NIO-Pipe

Java NIO 管道,原文地址:http://tutorials.jenkov.com/java-nio/pipe.html

一个 Java NIO 管道(Pipe)是一种两个线程之间通信的方式。一个管道有一个源通道和一个下游通道。你向下游通道写入数据,然后可以从源通道读取数据。
下面的插图展示了管道的概念:Java NIO: Pipe Internals

创建管道

你可以调用 Pipe 的 open() 方法来打开一个管道:

1
Pipe pipe = Pipe.open();

写数据到管道

写数据到管道首先要获得下游通道:

1
Pipe.SinkChannel sinkChannel = pipe.sink();

然后通过下游通道的 write() 方法写数据到下游通道:

1
2
3
4
5
6
7
8
9
10
String newData = "New String to write to file..." + Sysem.currentTimeMillis();
ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip();
while(buf.hasRemaining()){
sinkChannel.write(buf);
}

从管道中读取数据

从管道中读取数据首先要获取到管道的源通道:

1
Piep.SourceChannel sourceChannel = pipe.source();

然后可以通过调用 read() 方法从源通道中读取数据:

1
2
ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead = sourceChannel.read(buf);

int 类型的返回值 bytesRead 代表着读了多少数据到字节缓冲区。