java nio 管道是2个线程之间的单向数据连接。<code>pipe</code>有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。
这里是pipe原理的图示:
通过<code>pipe.open()</code>方法打开管道。例如:
<code>1</code>
<code>pipe pipe = pipe.open();</code>
要向管道写数据,需要访问sink通道。像这样:
<code>pipe.sinkchannel sinkchannel = pipe.sink();</code>
通过调用sinkchannel的<code>write()</code>方法,将数据写入<code>sinkchannel</code>,像这样:
<code>01</code>
<code>string newdata =</code><code>"new string to write to file..."</code> <code>+ system.currenttimemillis();</code>
<code>02</code>
<code>bytebuffer buf = bytebuffer.allocate(</code><code>48</code><code>);</code>
<code>03</code>
<code>buf.clear();</code>
<code>04</code>
<code>buf.put(newdata.getbytes());</code>
<code>05</code>
<code>06</code>
<code>buf.flip();</code>
<code>07</code>
<code>08</code>
<code>while</code><code>(buf.hasremaining()) {</code>
<code>09</code>
<code> </code><code>sinkchannel.write(buf);</code>
<code>10</code>
<code>}</code>
从读取管道的数据,需要访问source通道,像这样:
<code>pipe.sourcechannel sourcechannel = pipe.source();</code>
调用source通道的<code>read()</code>方法来读取数据,像这样:
<a href="http://ifeve.com/pipe/#viewsource">查看源代码</a>
<code>2</code>
<code>3</code>
<code>int</code> <code>bytesread = sourcechannel.read(buf);</code>
<code>read()</code>方法返回的int值会告诉我们多少字节被读进了缓冲区。