天天看點

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>方法來讀取資料,像這樣:

<code>2</code>

<code>3</code>

<code>int</code> <code>bytesread = sourcechannel.read(buf);</code>

<code>read()</code>方法傳回的int值會告訴我們多少位元組被讀進了緩沖區。