天天看点

Java NIO系列教程(十一) Pipe

java nio 管道是2个线程之间的单向数据连接。<code>pipe</code>有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。

这里是pipe原理的图示:

Java NIO系列教程(十一) 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值会告诉我们多少字节被读进了缓冲区。