JAVA-4NIO之Channel之間的數(shù)據(jù)傳輸方法
在Java NIO中,如果兩個(gè)通道中有一個(gè)是FileChannel,那你可以直接將數(shù)據(jù)從一個(gè)channel(譯者注:channel中文常譯作通道)傳輸?shù)搅硗庖粋€(gè)channel。
transferFrom():被動(dòng)接收
FileChannel的transferFrom()方法可以將數(shù)據(jù)從源通道傳輸?shù)紽ileChannel中(譯者注:這個(gè)方法在JDK文檔中的解釋為將字節(jié)從給定的可讀取字節(jié)通道傳輸?shù)酱送ǖ赖奈募校?/p>
方法的輸入?yún)?shù)position表示從position處開始向目標(biāo)文件寫入數(shù)據(jù),count表示最多傳輸?shù)淖止?jié)數(shù)。如果源通道的剩余空間小于 count 個(gè)字節(jié),則所傳輸?shù)淖止?jié)數(shù)要小于請(qǐng)求的字節(jié)數(shù)。
此外要注意,在SoketChannel的實(shí)現(xiàn)中,SocketChannel只會(huì)傳輸此刻準(zhǔn)備好的數(shù)據(jù)(可能不足count字節(jié))。因此,SocketChannel可能不會(huì)將請(qǐng)求的所有數(shù)據(jù)(count個(gè)字節(jié))全部傳輸?shù)紽ileChannel中。
transferTo():主動(dòng)發(fā)送
transferTo()方法將數(shù)據(jù)從FileChannel傳輸?shù)狡渌腸hannel中。下面是一個(gè)簡單的例子:
除了調(diào)用方法的FileChannel對(duì)象不一樣外,其他的都一樣。
上面所說的關(guān)于SocketChannel的問題在transferTo()方法中同樣存在。SocketChannel會(huì)一直傳輸數(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只會(huì)發(fā)送已經(jīng)準(zhǔn)備好的,不會(huì)發(fā)送count個(gè)
toChannel.transferFrom(fromChannel,position, count);
//將本通道 寫到 to;注意sockedfrom會(huì)一直發(fā)送,直到to被填滿
fromChannel.transferTo(position, count, toChannel);
}
以上這篇JAVA-4NIO之Channel之間的數(shù)據(jù)傳輸方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例
這篇文章主要介紹了redis統(tǒng)計(jì)APP在線人數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Java中IO流的BufferedOutputStream和FileOutputStream對(duì)比
這篇文章主要介紹了Java中IO流的BufferedOutputStream和FileOutputStream對(duì)比,不帶緩沖的操作,每讀一個(gè)字節(jié)就要寫入一個(gè)字節(jié),由于涉及磁盤的IO操作相比內(nèi)存的操作要慢很多,所以在讀寫的字節(jié)比較少的情況下,效率比較低,需要的朋友可以參考下2023-07-07
java jdbc連接mysql數(shù)據(jù)庫實(shí)現(xiàn)增刪改查操作
這篇文章主要為大家詳細(xì)介紹了java jdbc連接mysql數(shù)據(jù)庫實(shí)現(xiàn)增刪改查操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
SpringBoot中的ExpiringMap代碼實(shí)例
這篇文章主要介紹了SpringBoot中的ExpiringMap代碼實(shí)例,ExpiringMap是一個(gè)可以設(shè)置過期策略、可變條目過期、延遲條目加載和過期偵聽器的線程安全存儲(chǔ)容器,需要的朋友可以參考下2023-08-08
Java 重寫時(shí)應(yīng)當(dāng)遵守的 11 條規(guī)則
這篇文章主要介紹了Java 重寫時(shí)應(yīng)當(dāng)遵守的 11 條規(guī)則,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
spring mvc4的日期/數(shù)字格式化、枚舉轉(zhuǎn)換示例
本篇文章主要介紹了spring mvc4的日期/數(shù)字格式化、枚舉轉(zhuǎn)換示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
在Java的Hibernate框架中對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行查詢操作
這篇文章主要介紹了Java的Hibernate框架中對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行查詢操作的方法,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12
Mybatis Plus框架項(xiàng)目落地實(shí)踐分析總結(jié)
這篇文章主要為大家介紹了Mybatis Plus框架項(xiàng)目落地實(shí)踐分析總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

