Java的NIO中的管道,就類似于實(shí)際中的管道,有兩端,一段作為輸入,一段作為輸出。也就是說,在創(chuàng)建了一個(gè)管道后,既可以對(duì)管道進(jìn)行寫,也可以對(duì)管道進(jìn)行讀,不過這兩種操作要分別在兩端進(jìn)行。有點(diǎn)類似于隊(duì)列的方式。
發(fā)展壯大離不開廣大客戶長(zhǎng)期以來的信賴與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都資質(zhì)代辦等,在網(wǎng)站建設(shè)公司、全網(wǎng)整合營(yíng)銷推廣、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。
這里是Pipe原理的圖示:
創(chuàng)建管道
通過Pipe.open()方法打開管道。例如:
Pipe pipe = Pipe.open();
向管道寫數(shù)據(jù)
要向管道寫數(shù)據(jù),需要訪問sink通道。像這樣:
Pipe.SinkChannel sinkChannel = pipe.sink();
通過調(diào)用SinkChannel的write()方法,將數(shù)據(jù)寫入SinkChannel,像這樣:
String newData = "New String to write to file..." + System.currentTimeMillis(); ByteBuffer buf = ByteBuffer.allocate(48); buf.clear(); buf.put(newData.getBytes()); buf.flip(); while(buf.hasRemaining()) { sinkChannel.write(buf); }
我們?cè)跍y(cè)試?yán)又薪o出一個(gè)非常簡(jiǎn)單的管道操作,先向管道寫入內(nèi)容,再?gòu)墓艿雷x出內(nèi)容。
package com.test.nio; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.Pipe; public class TestPipeA { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { //創(chuàng)建一個(gè)管道 Pipe pipe=Pipe.open(); //創(chuàng)建一個(gè)寫管道 Pipe.SinkChannel sinkChannel=pipe.sink(); String newData="itbuluoge.com says:"+System.currentTimeMillis(); ByteBuffer buf=ByteBuffer.allocate(48); buf.clear(); buf.put(newData.getBytes()); buf.flip(); /*向管道寫入內(nèi)容*/ while(buf.hasRemaining()) { sinkChannel.write(buf); } /*創(chuàng)建一個(gè)讀管道*/ Pipe.SourceChannel sourceChannel=pipe.source(); ByteBuffer getBuf=ByteBuffer.allocate(48); int bytesRead=sourceChannel.read(getBuf); getBuf.flip(); /*從管道讀出內(nèi)容*/ while(getBuf.hasRemaining()) { System.out.print((char)getBuf.get()); } } }
輸出結(jié)果
我們可以看到,已經(jīng)可以完成我們需要的目標(biāo)了。注意,我在這個(gè)地方編程的時(shí)候,出現(xiàn)了一點(diǎn)錯(cuò)誤,就是我在讀取管道的時(shí)候,沒有設(shè)置getBuf.flip(),導(dǎo)致無法讀出數(shù)據(jù),這個(gè)函數(shù)非常重要,在完成buffer讀取內(nèi)容之后,一定要設(shè)置一下讀標(biāo)志,恢復(fù)指針到原始位置,才能讀取到全部?jī)?nèi)容。
以上就是本文關(guān)于java的NIO管道用法代碼分享的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
分享名稱:java的NIO管道用法代碼分享
路徑分享:http://redsoil1982.com.cn/article46/peeheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、云服務(wù)器、網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)