在java nio中鹃祖,你可以直接傳輸數(shù)據(jù)從一個(gè)channel到另外一個(gè),如果其中一個(gè)channel是FileChannel宴凉,這個(gè)FileChannel有兩個(gè)方法已經(jīng)為你做好了,分別是transferTo()和transferFrom()表悬。
transferFrom()
這個(gè)方法傳輸數(shù)據(jù)從一個(gè)源channel到FileChannel弥锄,下面是代碼例子:
position和count參數(shù)告訴目標(biāo)文件從哪個(gè)位置(position)開始寫,以及最大傳輸多少(count)個(gè)bytes蟆沫。如果源channel里面的bytes的數(shù)量比count小籽暇,那么就沒(méi)有任何字節(jié)被傳輸?shù)侥繕?biāo)文件。
另外饭庞,一些SocketChannel的實(shí)現(xiàn)類只會(huì)傳輸當(dāng)前它本身內(nèi)部所擁有的數(shù)據(jù)戒悠,即使SocketChannel后面會(huì)有更多的數(shù)據(jù)。因此從SocketChannel到FileChannel舟山,它不會(huì)傳輸整個(gè)請(qǐng)求里面的數(shù)據(jù)到FileChannel中绸狐。
transferTo()
這個(gè)方法就是從FileChannel傳輸數(shù)據(jù)到其他的channel卤恳。
這個(gè)例子和上面一個(gè)很像。僅有的不同就是調(diào)用方法的對(duì)象不同寒矿,其余是一樣的突琳。這個(gè)方法就是將FileChannel的數(shù)據(jù)傳輸?shù)絫oChannel中直到count,就停止傳輸符相。