Java NIO 管道是2个线程之间的单向数据连接。Pipe
有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。
这里是Pipe原理的图示:
![](data:image/png;base64,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)
创建管道
通过Pipe.open()
方法打开管道。例如:
1 |
Pipe pipe = Pipe.open(); |
向管道写数据
要向管道写数据,需要访问sink通道。像这样:
1 |
Pipe.SinkChannel sinkChannel = pipe.sink(); |
通过调用SinkChannel的write()
方法,将数据写入SinkChannel
,像这样:
01 |
String newData = "New String to write to file..." + System.currentTimeMillis(); |
02 |
ByteBuffer buf = ByteBuffer.allocate( 48 ); |
04 |
buf.put(newData.getBytes()); |
08 |
while (buf.hasRemaining()) { |
09 |
sinkChannel.write(buf); |
从管道读取数据
从读取管道的数据,需要访问source通道,像这样:
1 |
Pipe.SourceChannel sourceChannel = pipe.source(); |
调用source通道的read()
方法来读取数据,像这样:
1 |
ByteBuffer buf = ByteBuffer.allocate( 48 ); |
3 |
int bytesRead = sourceChannel.read(buf); |
read()
方法返回的int值会告诉我们多少字节被读进了缓冲区。