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>方法來讀取資料,像這樣:
<code>2</code>
<code>3</code>
<code>int</code> <code>bytesread = sourcechannel.read(buf);</code>
<code>read()</code>方法傳回的int值會告訴我們多少位元組被讀進了緩沖區。