JAVA-4NIO中如何實(shí)現(xiàn)Channel的數(shù)據(jù)傳輸?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為邵東等服務(wù)建站,邵東等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為邵東企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
在Java NIO中,如果兩個通道中有一個是FileChannel,那你可以直接將數(shù)據(jù)從一個channel(譯者注:channel中文常譯作通道)傳輸?shù)搅硗庖粋€channel。
transferFrom():被動接收
FileChannel的transferFrom()方法可以將數(shù)據(jù)從源通道傳輸?shù)紽ileChannel中(譯者注:這個方法在JDK文檔中的解釋為將字節(jié)從給定的可讀取字節(jié)通道傳輸?shù)酱送ǖ赖奈募校?/p>
方法的輸入?yún)?shù)position表示從position處開始向目標(biāo)文件寫入數(shù)據(jù),count表示最多傳輸?shù)淖止?jié)數(shù)。如果源通道的剩余空間小于 count 個字節(jié),則所傳輸?shù)淖止?jié)數(shù)要小于請求的字節(jié)數(shù)。
此外要注意,在SoketChannel的實(shí)現(xiàn)中,SocketChannel只會傳輸此刻準(zhǔn)備好的數(shù)據(jù)(可能不足count字節(jié))。因此,SocketChannel可能不會將請求的所有數(shù)據(jù)(count個字節(jié))全部傳輸?shù)紽ileChannel中。
transferTo():主動發(fā)送
transferTo()方法將數(shù)據(jù)從FileChannel傳輸?shù)狡渌腸hannel中。下面是一個簡單的例子:
除了調(diào)用方法的FileChannel對象不一樣外,其他的都一樣。
上面所說的關(guān)于SocketChannel的問題在transferTo()方法中同樣存在。SocketChannel會一直傳輸數(shù)據(jù)直到目標(biāo)buffer被填滿。
例子:
@Test
public void test2() {
RandomAccessFile fromFile = new RandomAccessFile("fromFile.txt", "rw");
FileChannel fromChannel = fromFile.getChannel();
RandomAccessFile toFile = new RandomAccessFile("toFile.txt", "rw");
FileChannel toChannel = toFile.getChannel();
long position = 0;
long count = fromChannel.size();
//從from 讀到 本通道;注意socketfrom只會發(fā)送已經(jīng)準(zhǔn)備好的,不會發(fā)送count個
toChannel.transferFrom(fromChannel,position, count);
//將本通道 寫到 to;注意sockedfrom會一直發(fā)送,直到to被填滿
fromChannel.transferTo(position, count, toChannel);
}看完上述內(nèi)容,你們掌握J(rèn)AVA-4NIO中如何實(shí)現(xiàn)Channel的數(shù)據(jù)傳輸?shù)姆椒藛幔咳绻€想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站欄目:JAVA-4NIO中如何實(shí)現(xiàn)Channel的數(shù)據(jù)傳輸
新聞來源:http://www.chinadenli.net/article36/gpcipg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、品牌網(wǎng)站制作、網(wǎng)站設(shè)計公司、全網(wǎng)營銷推廣、服務(wù)器托管、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)