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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java NIO 之 Channel(通道)Java
- 【譯】Java NIO 簡明教程系列之 NIO 概述Java
- Java-NIO之Channel(通道)Java
- 【譯】Java NIO 簡明教程系列之 NIO 簡介Java
- Java NIO:通道Java
- 【譯】Java NIO 簡明教程系列之 ChannelJava
- Java NIO.2系列文章之非同步通道API入門Java非同步API
- Java NIO 簡明教程系列Java
- Java NIO系列教程(二) ChannelJava
- Java NIO系列教程(六) SelectorJava
- Java NIO系列教程(七) FileChannelJava
- netty系列之:基於流的資料傳輸Netty
- postman(五):在不同介面之間傳遞資料Postman
- Java NIO學習系列五:I/O模型Java模型
- Java NIO 檔案通道 FileChannel 用法Java
- nio再學習之通道channel
- Xamarin Essentials教程資料處理傳輸資料
- Java NIO 系列文章之 淺析Reactor模式JavaReact模式
- Linux rsync配置用於伺服器之間傳輸大量的資料Linux伺服器
- vue元件之間的資料傳遞Vue元件
- 鐳速傳輸點亮“0元百日計劃”,為資料傳輸打通高速通道
- mysql之 表空間傳輸MySql
- fragment之間相互傳資料、共享資料Fragment
- 【NIO系列】——之IO模型模型
- javaNIO實戰4----> java NIO的通道Channel實戰Java
- 鐳速傳輸,大檔案傳輸軟體的快速通道
- 【乾貨分享】Ftrans安全資料交換系統 搭建跨網資料傳輸通道
- Docker框架使用系列教程(五)容器間的連結Docker框架
- 頁面之間傳遞資料
- Java NIO之Buffer的使用Java
- Java NIO之SelectorJava
- Java NIO之BufferJava
- Java Socket 之 NIOJava
- Java IO之NIOJava
- 使用Java NIO 和 NIO2實現檔案輸入/輸出Java
- Xamarin Essentials教程實現資料的傳輸功能例項
- 【NIO系列】——之TCP探祕TCP
- 不同順序InBoundHandler之間的資料傳遞