Java NIO系列教程(五) 通道之間的資料傳輸
在Java NIO中,如果兩個通道中有一個是FileChannel,那你可以直接將資料從一個channel(譯者注:channel中文常譯作通道)傳輸到另外一個channel。
transferFrom()
FileChannel的transferFrom()方法可以將資料從源通道傳輸到FileChannel中(譯者注:這個方法在JDK文件中的解釋為將位元組從給定的可讀取位元組通道傳輸到此通道的檔案中)。下面是一個簡單的例子:
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
(
)
;
toChannel
.
transferFrom
(position
, count
, fromChannel
)
;
方法的輸入引數position表示從position處開始向目標檔案寫入資料,count表示最多傳輸的位元組數。如果源通道的剩餘空間小於 count 個位元組,則所傳輸的位元組數要小於請求的位元組數。
此外要注意,在SoketChannel的實現中,SocketChannel只會傳輸此刻準備好的資料(可能不足count位元組)。因此,SocketChannel可能不會將請求的所有資料(count個位元組)全部傳輸到FileChannel中。
transferTo()
transferTo()方法將資料從FileChannel傳輸到其他的channel中。下面是一個簡單的例子:
RandomAccessFile fromFile
=
new
RandomAccessFile
(
"fromFile.txt"
,
"rw"
)
;
FileChannel fromChannel
= fromFile
.
getChannel
(
)
;
//java學習交流:737251827 進入可領取學習資源及對十年開發經驗大佬提問,免費解答!
RandomAccessFile toFile
=
new
RandomAccessFile
(
"toFile.txt"
,
"rw"
)
;
FileChannel toChannel
= toFile
.
getChannel
(
)
;
long position
=
0
;
long count
= fromChannel
.
size
(
)
;
fromChannel
.
transferTo
(position
, count
, toChannel
)
;
是不是發現這個例子和前面那個例子特別相似?除了呼叫方法的FileChannel物件不一樣外,其他的都一樣。
上面所說的關於SocketChannel的問題在transferTo()方法中同樣存在。SocketChannel會一直傳輸資料直到目標buffer被填滿。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2845637/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【NIO】Java NIO之通道Java
- Java NIO 之 Channel(通道)Java
- 【譯】Java NIO 簡明教程系列之 NIO 概述Java
- Java-NIO之Channel(通道)Java
- 【譯】Java NIO 簡明教程系列之 NIO 簡介Java
- Java NIO:通道Java
- Java NIO 通道Java
- 【譯】Java NIO 簡明教程系列之 ChannelJava
- Java NIO.2系列文章之非同步通道API入門Java非同步API
- Java NIO 簡明教程系列Java
- Java NIO系列教程(二) ChannelJava
- Java NIO系列教程(七) FileChannelJava
- Java NIO系列教程(六) SelectorJava
- netty系列之:基於流的資料傳輸Netty
- Java NIO3:通道和檔案通道Java
- Java NIO4:Socket通道Java
- postman(五):在不同介面之間傳遞資料Postman
- Java NIO學習系列五:I/O模型Java模型
- 轉:Java NIO系列教程(四) Scatter/GatherJava
- Java NIO 檔案通道 FileChannel 用法Java
- nio再學習之通道channel
- 海量資料遷移之傳輸表空間(一)
- Java NIO系列2:NIO概述Java
- Xamarin Essentials教程資料處理傳輸資料
- 對資料泵資料傳輸的時間統計
- 【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成資料遷移
- 鐳速傳輸點亮“0元百日計劃”,為資料傳輸打通高速通道
- 【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成資料遷移[轉]
- 【乾貨分享】Ftrans安全資料交換系統 搭建跨網資料傳輸通道
- 【NIO】Java NIO之緩衝Java
- mysql之 表空間傳輸MySql
- SAP各邏輯系統之間資料傳輸之ALE配置步驟
- vue元件之間的資料傳遞Vue元件
- Java NIO 系列文章之 淺析Reactor模式JavaReact模式
- 鐳速傳輸,大檔案傳輸軟體的快速通道
- Linux rsync配置用於伺服器之間傳輸大量的資料Linux伺服器
- fragment之間相互傳資料、共享資料Fragment
- Mac和Linux之間傳輸資料,並匯出mysql資料到本地MacLinuxMySql