Java NIO管道是在两个线程之间的单向数据连接。一个管道有一个Source和Sink Channel。数据可以从Source Channel中读取。
下图说明了管道的原则:
创建一个管道
可以通过Pipe.open()方法打开一个管道,如下所示:
Pipe pipe = Pipe.open();复制代码
向管道写入数据
向管道写入数据需要访问Sink Channel。如下面所示:
Pipe.SinkChannel sinkChannel = pipe.sink();复制代码
可以通过SinkChannel的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);}复制代码
从管道中读取数据
从管道中读取数据需要访问SourceChannel,如下所示:
Pipe.SourceChannel sourceChannel = pipe.source();复制代码
从管道中读取数据可以调用它的read()方法,像这样:
ByteBuffer buf = ByteBuffer.allcate(48);int byteRead = inChannel.read(buf);复制代码
read()方法的返回值已经向buffer中写入的字节数。