Java NIO 管道,原文地址:http://tutorials.jenkov.com/java-nio/pipe.html
一个 Java NIO 管道(Pipe)是一种两个线程之间通信的方式。一个管道有一个源通道和一个下游通道。你向下游通道写入数据,然后可以从源通道读取数据。
下面的插图展示了管道的概念:
创建管道
你可以调用 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 代表着读了多少数据到字节缓冲区。